home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / utility / 169 / menu.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-08-20  |  94.8 KB  |  3,015 lines

  1. PROGRAM DISK_DIR_DB( INPUT,OUTPUT ) ;
  2.  
  3.  
  4.   CONST
  5.     {$I GEMCONST.PAS}
  6.     Desk_Title = 3 ;    { The index of the "desk" item in the menu bar }
  7.  
  8.   TYPE
  9.     {$I gemtype.pas}
  10.     S = FILE OF TEXT;
  11.     FILE_NAME_TYPE = PACKED ARRAY [1..64] OF BYTE;
  12.     BUF_TYPE = PACKED ARRAY [ 0..255 ] OF CHAR;
  13.     BUFI_TYPE = INTEGER;
  14.  
  15.   VAR
  16.     OUTPUT_FILE : S;
  17.     OUT_FILE : S;
  18.     BLdn : ARRAY [0..1100] OF STRING[4];
  19.     BLAT : ARRAY [0..1100] OF STRING[2];
  20.     BLname : ARRAY [0..1100] OF STRING[14];
  21.     BLdate : ARRAY [0..1100] OF STRING[10];
  22.     BLfold : ARRAY [0..1100] OF STRING[14];
  23.     BLcomm : ARRAY [0..1100] OF STRING[26];
  24.     SINDX  : ARRAY [0..1100] OF INTEGER;
  25.     TEMP_BLdn : ARRAY [0..1100] OF STRING[4];
  26.     TEMP_BLAT : ARRAY [0..1100] OF STRING[2];
  27.     TEMP_BLname : ARRAY [0..1100] OF STRING[14];
  28.     TEMP_BLdate : ARRAY [0..1100] OF STRING[10];
  29.     TEMP_BLfold : ARRAY [0..1100] OF STRING[14];
  30.     PINDX  : ARRAY [0..1100] OF INTEGER;
  31.     SLINE : STRING ;
  32.     Sline1 : string;
  33.     Sline2 : string;
  34.     Sline3 : string;
  35.     Sline4 : string;
  36.     Sline5 : string;
  37.     title_line,
  38.     info_line1,
  39.     info_line2,
  40.     info_line3,
  41.     info_line4,
  42.     info_line5,
  43.     info_line6 :STR255;
  44.     LINE_COUNT,COUNT,LAST_DISK : INTEGER;
  45.     menu : Menu_Ptr ;
  46.     last_sx,last_sy,last_sw,last_sh,wx,wy,ww,wh,
  47.     txt_line,Txt_line1,Btn_a,Btn_b,Btn_c,p_name,ok,Cancel : INTEGER;
  48.     txtln,txtln1,txtln2,btn_na,btn_ty,btn_da,btn_di,btn_fo,btn_co,
  49.     ok1,cancel1,ok_button,info_item,
  50.     btn_d,
  51.     btn_e,
  52.     btn_f,
  53.     btn_g,
  54.     btn_h,
  55.     btn_i,
  56.     btn_j,
  57.     btn_k,
  58.     btn_l,
  59.     btn_m,
  60.     btn_n,
  61.     btn_o,
  62.     btn_p,
  63.     mc_line1,
  64.     mc_line2,
  65.     mc_line3,
  66.     mc_line4,
  67.     mc_line5,
  68.     mc_line6 : integer;
  69.     ACB : DIALOG_PTR;
  70.     ACB_PROMT,ACB_PROMT1,ACB_PROMT2,ACB_PROMT3,ACB_GET,ACB_CANCEL,
  71.     ACB_BOX1,ACB_BOX2,ACB_BOX21,ACB_BOX3,ACB_BOX4,ACB_BOX41,
  72.     ACB_BOX5,ACB_BOX6,ACB_BOX61,ACB_BOX7,ACB_BOX8,ACB_BOX81 : INTEGER;
  73.     Add_box,sort_box : Dialog_Ptr ;
  74.     dialog :array [1..6] of Dialog_Ptr ;
  75.     info_box : dialog_ptr;
  76.     wtitle,wititle,wstitle : window_title;
  77.     button, ok_btn, cancel_btn, prompt_item,GET_item : ARRAY [1..6] of Integer;
  78.     CW,CH,CUR_LOC,N,SX,SY,SH,SW,bw,bh,
  79.     dummy,handle,file_title,edit_title,SEARCH_TITLE,PRINT_TITLE,style_title,
  80.     qt_item,stype_item,sdate_item,sname_item,sdnum_item,Sfnd_item,SFOLD_ITEM,
  81.     flag1,COMB_ITEM,PRINTD_ITEM,PRINTP_ITEM,sort_item,BLANK_ITEM : INTEGER;
  82.     BLANK1_ITEM,PRINTA_ITEM,PRINTC_ITEM,PRINTS_ITEM : integer;
  83.     BLANK2_ITEM,BLANK3_ITEM,BLANK4_ITEM,BLANK5_ITEM,stat_ITEM,layout_ITEM,
  84.     CHANGE_ITEM,COM_ITEM,open_item,close_item,white_item,black_item,ADD_item,
  85.     LAST_LINE,w_options,vslsize,del_item,X,BLANK6_ITEM : integer ;
  86.     help_title,
  87.     item41,
  88.     item42,
  89.     item43,
  90.     item44,
  91.     item45,
  92.     item46,
  93.     item47,
  94.     item48,
  95.     item49,
  96.     item50,
  97.     item51,
  98.     item52,
  99.     item53,
  100.     item54,
  101.     item55,
  102.     item56,
  103.     item57,
  104.     item58,
  105.     item60,
  106.     b_state,
  107.     blank7_item,blank8_item,blank9_item : integer;
  108.     PRNT_COUNT : INTEGER;
  109.     alert1,PATH_STRING,SHW_BOX_STR,DNSTR,TOTL,LEFT,FOLDER : str255 ;
  110.     FULL_NAME,PATH_NM,PATH_NM1 : PATH_NAME ;
  111.     YN,COM_FLAG,ADD_FLAG,CANCEL_BOX,title_bar,COLOR_FLAG,
  112.     SEARCH_FLAG,BUFFER_FLAG : BOOLEAN ;
  113.     scrn_size,total_lines : REAL;
  114.     first_flag,
  115.     timer_flag,
  116.     adrive,
  117.     bdrive,
  118.     cdrive,
  119.     ddrive,
  120.     edrive,
  121.     fdrive,
  122.     gdrive,
  123.     hdrive,
  124.     idrive,
  125.     jdrive,
  126.     kdrive,
  127.     ldrive,
  128.     mdrive,
  129.     ndrive,
  130.     odrive,
  131.     pdrive : boolean;
  132.  
  133.   {$I gemsubs}          { and that ".PAS" is default }
  134.  
  135.   FUNCTION gem_create( VAR fname : PATH_NAME ; mode : integer ) : integer;
  136.     GEMDOS( $3C ) ;
  137.  
  138.   FUNCTION gem_open( VAR fname : PATH_NAME ; mode : integer ) : integer;
  139.     GEMDOS( $3D ) ;
  140.  
  141.   PROCEDURE gem_close( handle : integer ) ;
  142.     GEMDOS( $3E ) ;
  143.  
  144.   FUNCTION gem_read( handle : integer ; nbytes : long_integer ;
  145.                 VAR buf : BUF_TYPE ) : long_integer ;
  146.     GEMDOS( $3F ) ;
  147.   FUNCTION gem_readI( handle : integer ; nbytes : long_integer ;
  148.                 VAR buf : BUFI_TYPE ) : long_integer ;
  149.     GEMDOS( $3F ) ;
  150.  
  151.   FUNCTION gem_write( handle : integer ; nbytes : long_integer ;
  152.                 VAR buf : BUF_TYPE ) : long_integer ;
  153.     GEMDOS( $40 ) ;
  154.   FUNCTION gem_writeI( handle : integer ; nbytes : long_integer ;
  155.                 VAR buf : BUFI_TYPE ) : long_integer ;
  156.     GEMDOS( $40 ) ;
  157.  
  158.   PROCEDURE gem_seek( nbytes : long_integer ; handle, mode : integer ) ;
  159.     GEMDOS( $42 ) ;
  160.  
  161.   FUNCTION drivmap : long_integer;
  162.     BIOS(10);
  163.  
  164.   FUNCTION GETREZ : INTEGER;
  165.     XBIOS($4);
  166.  
  167.   PROCEDURE SETSCREEN(LOGADR,PHYSADR : LONG_INTEGER; REZ : INTEGER);
  168.     XBIOS($5);
  169.  
  170.  
  171. PROCEDURE SYSTEM_DRIVES;
  172.  
  173.   VAR X,y : LONG_INTEGER;
  174.       z,xx : integer;
  175.  BEGIN
  176.   x := drivmap;
  177.   y := x & $0000ffff;
  178.   z := int(y);
  179.   xx := z & $0001;
  180.   if xx <> 0 then adrive := true
  181.             else adrive := false;
  182.   xx := z & $0002;
  183.   if xx <> 0 then bdrive := true
  184.             else bdrive := false;
  185.   xx := z & $0004;
  186.   if xx <> 0 then cdrive := true
  187.             else cdrive := false;
  188.   xx := z & $0008;
  189.   if xx <> 0 then ddrive := true
  190.             else ddrive := false;
  191.   xx := z & $0010;
  192.   if xx <> 0 then edrive := true
  193.             else edrive := false;
  194.   xx := z & $0020;
  195.   if xx <> 0 then fdrive := true
  196.             else fdrive := false;
  197.   xx := z & $0040;
  198.   if xx <> 0 then gdrive := true
  199.             else gdrive := false;
  200.   xx := z & $0080;
  201.   if xx <> 0 then hdrive := true
  202.             else hdrive := false;
  203.   xx := z & $0100;
  204.   if xx <> 0 then idrive := true
  205.             else idrive := false;
  206.   xx := z & $0200;
  207.   if xx <> 0 then jdrive := true
  208.             else jdrive := false;
  209.   xx := z & $0400;
  210.   if xx <> 0 then kdrive := true
  211.             else kdrive := false;
  212.   xx := z & $0800;
  213.   if xx <> 0 then ldrive := true
  214.             else ldrive := false;
  215.   xx := z & $1000;
  216.   if xx <> 0 then mdrive := true
  217.             else mdrive := false;
  218.   xx := z & $2000;
  219.   if xx <> 0 then ndrive := true
  220.             else ndrive := false;
  221.   xx := z & $4000;
  222.   if xx <> 0 then odrive := true
  223.             else odrive := false;
  224.   xx := z & $8000;
  225.   if xx <> 0 then pdrive := true
  226.             else pdrive := false;
  227.  END;
  228.  
  229. PROCEDURE INIT_MENU;
  230.  
  231.  
  232.       BEGIN
  233.         menu := New_Menu( 62, '  About MENU  ' ) ;
  234.         file_title := Add_MTitle( menu, ' File ' ) ;
  235.         SEARCH_title := Add_MTitle( menu, ' Search \ Sort ' ) ;
  236.         PRINT_title := Add_MTitle( menu, ' Print ' ) ;
  237.         STYLE_TITLE := ADD_MTITLE( MENU, ' Style ' ) ;
  238.         HELP_TITLE := ADD_MTITLE( MENU, ' Help ' ) ;
  239.         open_item  := Add_MItem( menu, file_title,     '  OPEN FILE     ' ) ;
  240.         close_item := Add_MItem( menu, file_title,     '  SAVE FILE     ' ) ;
  241.         BLANK1_item    := Add_MItem( menu, file_title, '----------------' ) ;
  242.         ADD_item   := Add_MItem( menu, FILE_title,     '  ADD FILES     ' ) ;
  243.         del_item := Add_MItem( menu, FILE_title,       '  DELETE FILE   ' ) ;
  244.         BLANK2_item    := Add_MItem( menu, file_title, '----------------' ) ;
  245.         COM_item := Add_MItem( menu, FILE_title,       '  ADD COMMENTS  ' ) ;
  246.         item60   := Add_MItem( menu, FILE_title,       '  EDIT COMMENT  ' ) ;
  247.         BLANK_item    := Add_MItem( menu, file_title,  '----------------' ) ;
  248.         qt_item    := Add_MItem( menu, file_title,     '  QUIT PROGRAM  ' ) ;
  249.         SNAME_item := Add_MItem( menu, search_title,  '  by NAME       ' ) ;
  250.         STYPE_item := Add_MItem( menu, search_title,  '  by TYPE       ' ) ;
  251.         sdate_item := Add_MItem( menu, search_title,  '  by DATE       ' ) ;
  252.         sdnum_item := Add_MItem( menu, search_title,  '  by DISK #     ' ) ;
  253.         sFOLD_item := Add_MItem( menu, search_title,  '  by FOLDER     ' ) ;
  254.         COMB_item := Add_MItem( menu, search_title,   '  by COMMENTS   ' ) ;
  255.         BLANK3_item := Add_MItem( menu, search_title, '----------------' ) ;
  256.         PRINTA_item := Add_MItem( menu, SEARCH_title, '  BLOCK SEARCH  ' ) ;
  257.         Sfnd_item := Add_MItem( menu, search_title,   '  FIND PATH     ' ) ;
  258.         blank4_item := Add_MItem( menu, search_title, '----------------' ) ;
  259.         sort_item := Add_MItem( menu, search_title,   '  SORT          ' ) ;
  260.         PRINTD_item := Add_MItem( menu, PRINT_title, '  PRINT ALL     ' ) ;
  261.         PRINTP_item := Add_MItem( menu, PRINT_title, '  PRINT BUFFER  ' ) ;
  262.         blank6_item := Add_MItem( menu, PRINT_title, '----------------' ) ;
  263.         PRINTC_item := Add_MItem( menu, PRINT_title, '  ERASE BUFFER  ' ) ;
  264.         white_item := Add_MItem( menu, style_title,  '  DEFAULT COLORS  ' ) ;
  265.         black_item := Add_MItem( menu, style_title,  '  INVERSE COLORS  ' ) ;
  266.         blank5_item := Add_MItem( menu, STYLE_title, '------------------' ) ;
  267.         STAT_item := Add_MItem( menu, STYLE_title,   '  STATUS LINE     ' ) ;
  268.         layout_item := Add_MItem( menu, STYLE_title, '  LAYOUT LINE     ' ) ;
  269.         ITEM41 := Add_MItem( menu, HELP_title, '  OPEN FILE       ' ) ;
  270.         ITEM42 := Add_MItem( menu, HELP_title, '  SAVE FILE       ' ) ;
  271.         ITEM43 := Add_MItem( menu, HELP_title, '  ADD FILES       ' ) ;
  272.         ITEM44 := Add_MItem( menu, HELP_title, '  DELETE FILE     ' ) ;
  273.         ITEM45 := Add_MItem( menu, HELP_title, '  COMMENT         ' ) ;
  274.         item58 := Add_MItem( menu, HELP_title, '  EDIT COMMENT    ' ) ;
  275.         ITEM46 := Add_MItem( menu, HELP_title, '  QUIT PROGRAM    ' ) ;
  276.         BLANK7_ITEM := Add_MItem( menu, HELP_title, '------------------' ) ;
  277.         ITEM47 := Add_MItem( menu, HELP_title, '  SEARCH          ' ) ;
  278.         ITEM48 := Add_MItem( menu, HELP_title, '  BLOCK SEARCH    ' ) ;
  279.         ITEM49 := Add_MItem( menu, HELP_title, '  FIND PATH       ' ) ;
  280.         ITEM50 := Add_MItem( menu, HELP_title, '  SORT            ' ) ;
  281.         BLANK8_ITEM := Add_MItem( menu, HELP_title, '------------------' ) ;
  282.         ITEM51 := Add_MItem( menu, HELP_title, '  PRINT ALL       ' ) ;
  283.         ITEM52 := Add_MItem( menu, HELP_title, '  PRINT BUFFER    ' ) ;
  284.         ITEM53 := Add_MItem( menu, HELP_title, '  ERASE BUFFER    ' ) ;
  285.         BLANK9_ITEM := Add_MItem( menu, HELP_title, '------------------' ) ;
  286.         ITEM54 := Add_MItem( menu, HELP_title, '  DEFAULT COLORS  ' ) ;
  287.         ITEM55 := Add_MItem( menu, HELP_title, '  INVERSE COLORS  ' ) ;
  288.         ITEM56 := Add_MItem( menu, HELP_title, '  STATUS LINE     ' ) ;
  289.         ITEM57 := Add_MItem( menu, HELP_title, '  LAYOUT LINE     ' ) ;
  290.         Draw_Menu( menu ) ;
  291.         MENU_DISABLE(MENU,BLANK_ITEM);
  292.         MENU_DISABLE(MENU,BLANK1_ITEM);
  293.         MENU_DISABLE(MENU,BLANK2_ITEM);
  294.         MENU_DISABLE(MENU,BLANK3_ITEM);
  295.         MENU_DISABLE(MENU,BLANK4_ITEM);
  296.         MENU_DISABLE(MENU,BLANK5_ITEM);
  297.         MENU_DISABLE(MENU,BLANK6_ITEM);
  298.         MENU_DISABLE(MENU,BLANK7_ITEM);
  299.         MENU_DISABLE(MENU,BLANK8_ITEM);
  300.         MENU_DISABLE(MENU,BLANK9_ITEM);
  301.         MENU_CHECK(MENU,LAYOUT_ITEM,TRUE);
  302.         title_bar := false;
  303.         COM_FLAG := false;
  304.      END;
  305.  
  306.   (* str - Convert the integer in the parameter 'n' to a string in 's'.  The
  307.       string may consist of a minus sign ('-'), followed by up to 5 digits of
  308.       the number.  The string will be the minimal length which will hold the
  309.       number (i.e., leading plus signs and leading zeros will NOT appear in
  310.       the final string!). *)
  311.  
  312.   PROCEDURE str( n: integer; VAR s: str255 );
  313.  
  314.     VAR
  315.       digit,            (* Holds each digit value of 'n' as it is created *)
  316.       divisor,          (* Division by this is used to find each digit *)
  317.       i: integer;       (* Index in string at which to put next character *)
  318.       leading: boolean; (* True, if the next digit will be the leading digit *)
  319.  
  320.     (* add_char - Add a single character to the string, incrementing the curren
  321.         index. *)
  322.  
  323.     PROCEDURE add_char( c: char );
  324.  
  325.       BEGIN
  326.         i := i + 1;
  327.         s[i] := c;
  328.       END;
  329.  
  330.     BEGIN (* str - main routine *)
  331.       i := 0;           (* Start at the beginning of the string *)
  332.       IF n < 0 THEN     (* If the number is negative, add a minus sign *)
  333.         BEGIN
  334.           add_char( '-' );
  335.           n := -n;
  336.         END;
  337.       (* Now divide the number by decreasing divisors to form each digit-- the
  338.         divisor starts at 10000, since this is the maximum power of 10 which
  339.         will fit into a positive integer. *)
  340.       divisor := 10000;
  341.       leading := true;
  342.       WHILE divisor > 0 DO
  343.         BEGIN
  344.           (* Get the next digit value.  If the digit is not zero, or the digit
  345.             will not be the leading digit, then add it to the string (this
  346.             inhibits the addition of leading zeros). *)
  347.           digit := n DIV divisor;
  348.           IF (digit <> 0) OR NOT( leading ) THEN
  349.             BEGIN
  350.               add_char( chr(digit + ord('0')) );
  351.               leading := false;
  352.             END;
  353.           (* Throw away the part of the number just used, and decrease the
  354.             divisor so we will get the next digit next time. *)
  355.           n := n MOD divisor;
  356.           divisor := divisor DIV 10;
  357.         END;
  358.       (* At this point, if the index is still zero, then we didn't add any
  359.         characters to the string!  The original number must have been zero, so
  360.         just add that single character. *)
  361.       IF i = 0 THEN
  362.         add_char( '0' );
  363.       (* Finally, set the length of the string to the final index value. *)
  364.       s[0] := chr(i);
  365.     END;
  366.  
  367. Procedure infobox;
  368.  
  369.  var str1 : str255;
  370.      BUTTON : INTEGER;
  371.      INFO_BOX : DIALOG_PTR;
  372.      INFO_ITEM, OK_BUTTON : INTEGER;
  373.      SF : INTEGER;
  374.  
  375. begin
  376.   sf := System_Font;
  377.   str1 := '    THE MENU    ';
  378.   STR1[1] := CHR(14);
  379.   STR1[2] := CHR(15);
  380.   STR1[15] := CHR(14);
  381.   STR1[16] := CHR(15);
  382.   Info_Box := New_Dialog(17,0,0,40,20);
  383.   info_item := Add_DItem(Info_Box,G_Text,None,2,1,36,1,0,$1180);
  384.   Set_DText(Info_Box,info_item,STR1,sf,TE_Center);
  385.   info_item := Add_DItem(Info_Box,G_Text,None,2,3,36,1,0,$1180);
  386.   Set_DText(Info_Box,info_item,'by M.F. HOLLENBECK',sf,TE_Center);
  387.   STR1 := 'Copyright   1987';
  388.   str1[11] := chr(189);
  389.   info_item := Add_DItem(Info_Box,G_Text,None,2,5,36,1,0,$1180);
  390.   Set_DText(Info_Box,info_item,str1,sf,TE_Center);
  391.   info_item := Add_DItem(Info_Box,G_Text,None,2,7,36,1,0,$1180);
  392.   Set_DText(Info_Box,info_item,'Version 1.0',sf,TE_Center);
  393.   info_item := Add_DItem(Info_Box,G_Text,None,2,9,36,1,0,$1180);
  394.   Set_DText(Info_Box,info_item,'from Future Software Systems',sf,TE_Center);
  395.   info_item := Add_DItem(Info_Box,G_Text,None,2,10,36,1,0,$1180);
  396.   Set_DText(Info_Box,info_item,'21125 Chatsworth st.',sf,TE_Center);
  397.   info_item := Add_DItem(Info_Box,G_Text,None,2,11,36,1,0,$1180);
  398.   Set_DText(Info_Box,info_item,'Chatsworth Ca. 91311',sf,TE_Center);
  399.   info_item := Add_DItem(Info_Box,G_Text,None,2,12,36,1,0,$1180);
  400.   Set_DText(Info_Box,info_item,'(818)-341-8681',sf,TE_Center);
  401.   info_item := Add_DItem(Info_Box,G_Text,None,2,14,36,1,0,$1180);
  402.   Set_DText(Info_Box,info_item,'PLACED IN THE PUBLIC DOMAIN',sf,TE_Center);
  403.   info_item := Add_DItem(Info_Box,G_Text,None,2,15,36,1,0,$1180);
  404.   Set_DText(Info_Box,info_item,'NOT FOR RESALE',sf,TE_Center);
  405.   ok_button := Add_DItem(Info_Box,G_Button,Selectable|Exit_Btn|Default,
  406.               15,17,8,2,2,$1180);
  407.   Set_DText(Info_Box,ok_button,'OK',sf,TE_Center);
  408.   Center_Dialog(Info_Box);
  409.   button := Do_Dialog(Info_Box,0);
  410.   End_Dialog(Info_Box);
  411.   Delete_Dialog(Info_Box);
  412. end;
  413.  
  414. PROCEDURE upercase(var str1 : str255);
  415.  
  416.  var i,j : integer;
  417.  
  418.  begin
  419.   for i := 1 to length(str1) do
  420.    begin
  421.     if str1[i] IN ['a'..'z'] then
  422.      begin
  423.       j := ord(str1[i]) - ord('a') + ord('A');
  424.       str1[i] := chr(j);
  425.      end;
  426.    end;
  427.  end;
  428.  
  429. procedure data_box;
  430.  
  431.   var sf : integer;
  432.       button : integer;
  433.  
  434.  begin
  435.   Info_Box := New_Dialog(30,0,0,62,11);
  436.   sf := System_Font;
  437.   info_item := Add_DItem(Info_Box,G_Text,None,2,1,58,1,0,$1180);
  438.   Set_DText(Info_Box,info_item,title_line,sf,TE_center);
  439.   mc_line1 := Add_DItem(Info_box,g_text,none,2,4,50,1,0,$1180);
  440.   set_dtext(info_box,mc_line1,info_line1,sf,te_left);
  441.   mc_line2 := Add_DItem(Info_box,g_text,none,2,5,50,1,0,$1180);
  442.   set_dtext(info_box,mc_line2,info_line2,sf,te_left);
  443.   mc_line3 := Add_DItem(Info_box,g_text,none,2,6,50,1,0,$1180);
  444.   set_dtext(info_box,mc_line3,info_line3,sf,te_left);
  445.   mc_line4 := Add_DItem(Info_box,g_text,none,2,7,50,1,0,$1180);
  446.   set_dtext(info_box,mc_line4,info_line4,sf,te_left);
  447.   mc_line5 := Add_DItem(Info_box,g_text,none,2,8,50,1,0,$1180);
  448.   set_dtext(info_box,mc_line5,info_line5,sf,te_left);
  449.   mc_line6 := Add_DItem(Info_box,g_text,none,2,9,50,1,0,$1180);
  450.   set_dtext(info_box,mc_line6,info_line6,sf,te_left);
  451.   ok_button := Add_DItem(Info_Box,G_Button,Selectable|Exit_Btn|Default,
  452.               54,4,4,6,0,$1180);
  453.   Set_DText(Info_Box,ok_button,'OK',sf,TE_Center);
  454.   Center_Dialog(Info_Box);
  455.   button := Do_Dialog(Info_Box,0);
  456.   End_Dialog(Info_Box);
  457.   Delete_Dialog(Info_Box);
  458.  end;
  459.  
  460.  
  461. Procedure item41_proc;
  462.  
  463. begin
  464.  title_line := 'The " OPEN " Menu item';
  465.  info_line1 := 'This menu selection will LOAD directory files from';
  466.  info_line2 := 'the disk.                                         ';
  467.  info_line3 := '                                                  ';
  468.  info_line4 := '                  CAUTION                         ';
  469.  info_line5 := 'Take care that the file you choose is a valid     ';
  470.  info_line6 := 'directory file or an ERROR may result.            ';
  471.  data_box;
  472. end;
  473.  
  474. Procedure item42_proc;
  475.  
  476. begin
  477.  title_line := 'The " SAVE AS " Menu item';
  478.  info_line1 := 'This menu selection allows you to save the current';
  479.  info_line2 := 'directory in memory to a disk file.               ';
  480.  info_line3 := '                                                  ';
  481.  info_line4 := '                  CAUTION                         ';
  482.  info_line5 := 'Try to use a ".DIR" extention on the filename you ';
  483.  info_line6 := 'choose                                            ';
  484.  data_box;
  485. end;
  486.  
  487. Procedure item43_proc;
  488.  
  489. begin
  490.  title_line := 'The " ADD " Menu item';
  491.  info_line1 := 'Adding directories to the data base is very simple';
  492.  info_line2 := 'the first box you see will ask for a disk number  ';
  493.  info_line3 := 'enter a number from 1 to 1000 and mark the disk   ';
  494.  info_line4 := 'you are going to catalog with this number.        ';
  495.  info_line5 := 'THIS STEP IS VERY IMPORTANT if you forget to mark ';
  496.  info_line6 := 'the disk you will have trouble finding it latter. ';
  497.  data_box;
  498.  title_line := 'The " ADD " Menu item   continued...';
  499.  info_line1 := 'after you have entered the number of the disk and ';
  500.  info_line2 := 'marked it, insert the disk in the drive of your   ';
  501.  info_line3 := 'choice. ( if you are working with a hard disk     ';
  502.  info_line4 := 'try to catalogue it first. Make drive "C" number 1';
  503.  info_line5 := 'drive "D" number two etc.  After you have finished';
  504.  info_line6 := 'the hard disks then do the floppies. )            ';
  505.  data_box;
  506.  title_line := 'The " ADD " Menu item   continued...';
  507.  info_line1 := 'the next box will ask for you to choose a drive   ';
  508.  info_line2 := 'THE MENU will allow you to search any drive that  ';
  509.  info_line3 := 'is active at the time the program was started.    ';
  510.  info_line4 := 'Just click the mouse button on the drive you wish ';
  511.  info_line5 := 'to search and click the OK button. If you wish to ';
  512.  info_line6 := 'CANCEL the operation click on the CANCEL button.  ';
  513.  data_box;
  514.  title_line := 'The " ADD " Menu item   continued...';
  515.  info_line1 := 'THE MENU will now search the disk you selected and';
  516.  info_line2 := 'add its contents to the data base.                ';
  517.  info_line3 := 'If the COMMENTS menu item is checked the program  ';
  518.  info_line4 := 'will but up another box asking for a comment. You ';
  519.  info_line5 := 'have a choice of any of the 12 predefined comments';
  520.  info_line6 := 'or you can enter your own.  ';
  521.  data_box;
  522.  title_line := 'The " ADD " Menu item   continued...';
  523.  info_line1 := 'This box will be reapeated untill all the files   ';
  524.  info_line2 := 'are commented.                                    ';
  525.  info_line3 := 'If you change the files on a disk and want to     ';
  526.  info_line4 := 'update the data base simply reread the disk with  ';
  527.  info_line5 := 'the same disk number and THE MENU will automaticly';
  528.  info_line6 := 'update the data base.                             ';
  529.  data_box;
  530. end;
  531.  
  532. Procedure item44_proc;
  533.  
  534. begin
  535.  title_line := 'The " DELETE " Menu item';
  536.  info_line1 := 'This menu selection will allow you to delete a    ';
  537.  info_line2 := 'file from the data base.  Just click on this menu ';
  538.  info_line3 := 'item and enter the filename you want deleted.     ';
  539.  info_line4 := '                  CAUTION                         ';
  540.  info_line5 := 'Make sure you enter the filename exactly as it    ';
  541.  info_line6 := 'appears in the data base.                         ';
  542.  data_box;
  543. end;
  544.  
  545. Procedure item45_proc;
  546.  
  547. begin
  548.  title_line := 'The " COMMENT " Menu item';
  549.  info_line1 := '                                                  ';
  550.  info_line2 := '                                                  ';
  551.  info_line3 := '                                                  ';
  552.  info_line4 := 'If this item is checked the computer will prompt  ';
  553.  info_line5 := 'you for comments after the directory has been read';
  554.  info_line6 := 'into memory.                                      ';
  555.  data_box;
  556. end;
  557.  
  558. Procedure item46_proc;
  559.  
  560. begin
  561.  title_line := 'The " QUIT " Menu item';
  562.  info_line1 := 'This menu selection will ask if you are sure you  ';
  563.  info_line2 := 'you want to quit. If you answer yes it will stop  ';
  564.  info_line3 := 'the program and return you to the desktop.        ';
  565.  info_line4 := '                                                  ';
  566.  info_line5 := '                  CAUTION                         ';
  567.  info_line6 := 'MAKE SURE YOU HAVE SAVED THE FILE IN MEMORY FIRST ';
  568.  data_box;
  569. end;
  570.  
  571. Procedure item47_proc;
  572.  
  573. begin
  574.  title_line := ' SEARCHING THE DATA BASE ';
  575.  info_line1 := 'You can search the data base by any one of the six';
  576.  info_line2 := 'catagories. (NAME, TYPE, DATE, FOLDER, DISK # AND ';
  577.  info_line3 := 'COMMENTS ) Just click on the field you want to    ';
  578.  info_line4 := 'search on and follow the promts. The file if found';
  579.  info_line5 := 'will appear just below the title bar on the window';
  580.  info_line6 := 'The search is a CONTAINS search so you dont have  ';
  581.  data_box;
  582.  title_line := ' SEARCHING THE DATA BASE  cont. ';
  583.  info_line1 := 'enter the full name. the computer will show the   ';
  584.  info_line2 := 'first occurance of that file. and the window will ';
  585.  info_line3 := 'position itself so that the file is the top one   ';
  586.  info_line4 := 'listed on the screen. EXAMPLE if you sort by TYPE ';
  587.  info_line5 := 'and then search for .PRG the computer will move   ';
  588.  info_line6 := 'the window to the fist file with a .PRG extention.';
  589.  data_box;
  590.  title_line := ' SEARCHING THE DATA BASE  cont. ';
  591.  info_line1 := 'If a file is found the computer will ask if you   ';
  592.  info_line2 := 'want to add it to the print buffer for latter     ';
  593.  info_line3 := 'printing this can be usefull if you want to list  ';
  594.  info_line4 := 'only a few files to the printer or disk.          ';
  595.  info_line5 := '                                                  ';
  596.  info_line6 := '                                                  ';
  597.  data_box;
  598. end;
  599.  
  600. Procedure item48_proc;
  601.  
  602. begin
  603.  title_line := 'The " BLOCK SEARCH " Menu item';
  604.  info_line1 := 'This menu selection functions about the same as   ';
  605.  info_line2 := 'the single search except it does not move the     ';
  606.  info_line3 := 'window and it will continue the search returning  ';
  607.  info_line4 := 'all files that match.                             ';
  608.  info_line5 := '                                                  ';
  609.  info_line6 := '                                                  ';
  610.  data_box;
  611. end;
  612.  
  613. Procedure item49_proc;
  614.  
  615. begin
  616.  title_line := 'The " FIND PATH " Menu item';
  617.  info_line1 := 'This menu selection is probably one of the most   ';
  618.  info_line2 := 'useful funtions in the program. If you have allot ';
  619.  info_line3 := 'of disks or a hard disk with allot of files you   ';
  620.  info_line4 := 'can use this function to find a particular file.  ';
  621.  info_line5 := 'it will show the file and complete path on the    ';
  622.  info_line6 := 'information bar. IE: disk #25 FOLDER1\FOLDER2\FILE';
  623.  data_box;
  624. end;
  625.  
  626. Procedure item50_proc;
  627.  
  628. begin
  629.  title_line := 'The " SORT " Menu item';
  630.  info_line1 := 'This menu selection will sort your data base by   ';
  631.  info_line2 := 'any of the six fields ( NAME, DATE, DISK #, FOLDER';
  632.  info_line3 := 'TYPE AND COMMENTS ).                              ';
  633.  info_line4 := '                  CAUTION                         ';
  634.  info_line5 := 'A FULL DATA BASE CAN TAKE AS MUCH AS 30 SECONDS TO';
  635.  info_line6 := 'SORT.                                             ';
  636.  data_box;
  637. end;
  638.  
  639. Procedure item51_proc;
  640.  
  641. begin
  642.  title_line := 'The " PRINT ALL " Menu item';
  643.  info_line1 := 'This menu selection will allow you to print the   ';
  644.  info_line2 := 'entire data base to the printer or if you prefure ';
  645.  info_line3 := 'to the disk for use with your favorite word proc. ';
  646.  info_line4 := '                  CAUTION                         ';
  647.  info_line5 := '      MAKE SURE YOUR PRINTER IS CONNECTED         ';
  648.  info_line6 := '                                                  ';
  649.  data_box;
  650. end;
  651.  
  652. Procedure item52_proc;
  653.  
  654. begin
  655.  title_line := 'The " PRINT BUFFER " Menu item';
  656.  info_line1 := 'This menu selection will print only the file in   ';
  657.  info_line2 := 'print buffer to your printer or to disk.          ';
  658.  info_line3 := 'As an example if you want to just print all the   ';
  659.  info_line4 := 'files with a ".PRG" extention you would first use ';
  660.  info_line5 := 'the BLOCK SEARCH function and put all the files in';
  661.  info_line6 := 'the print buffer then choose this option.         ';
  662.  data_box;
  663. end;
  664.  
  665. Procedure item53_proc;
  666.  
  667. begin
  668.  title_line := 'The " ERASE BUFFER " Menu item';
  669.  info_line1 := 'This menu selection will clear the print buffer.  ';
  670.  info_line2 := '                                                  ';
  671.  info_line3 := '                                                  ';
  672.  info_line4 := '                  CAUTION                         ';
  673.  info_line5 := 'THIS FUNCTION WILL CLEAR THE ENTIRE BUFFER MAKE   ';
  674.  info_line6 := 'SURE YOU HAVE PRINTED THE BUFFER BEFORE CLEARING. ';
  675.  data_box;
  676. end;
  677.  
  678. Procedure item54_proc;
  679.  
  680. begin
  681.  title_line := 'The " DEFAULT COLORS " Menu item';
  682.  info_line1 := 'This menu selection will show the screen in the   ';
  683.  info_line2 := 'default colors that were in memory when you loaded';
  684.  info_line3 := 'the program.                                      ';
  685.  info_line4 := '                                                  ';
  686.  info_line5 := '                                                  ';
  687.  info_line6 := '                                                  ';
  688.  data_box;
  689. end;
  690.  
  691. Procedure item55_proc;
  692.  
  693. begin
  694.  title_line := 'The " INVERSE COLORS " Menu item';
  695.  info_line1 := 'This menu selection will invert the colors on the ';
  696.  info_line2 := 'screen IE: white becomes black and black becomes  ';
  697.  info_line3 := 'white.                                            ';
  698.  info_line4 := '                      NOTE                        ';
  699.  info_line5 := 'On a color system black will be blue because it is';
  700.  info_line6 := 'easier on the eyes.                               ';
  701.  data_box;
  702. end;
  703.  
  704. Procedure item56_proc;
  705.  
  706. begin
  707.  title_line := 'The " STATUS LINE " Menu item';
  708.  info_line1 := 'This menu selection will change the information   ';
  709.  info_line2 := 'bar just below the title bar to show the status of';
  710.  info_line3 := 'the data base.                                    ';
  711.  info_line4 := '                                                  ';
  712.  info_line5 := '                                                  ';
  713.  info_line6 := '                                                  ';
  714.  data_box;
  715. end;
  716.  
  717. Procedure item57_proc;
  718.  
  719. begin
  720.  title_line := 'The " LAYOUT LINE " Menu item';
  721.  info_line1 := 'This menu selection will change the information   ';
  722.  info_line2 := 'bar located just below the title bar to show the  ';
  723.  info_line3 := 'layout of the screen.                             ';
  724.  info_line4 := '                                                  ';
  725.  info_line5 := '                                                  ';
  726.  info_line6 := '                                                  ';
  727.  data_box;
  728. end;
  729.  
  730. Procedure item58_proc;
  731.  
  732. begin
  733.  title_line := 'The " EDIT COMMENT " Menu item';
  734.  info_line1 := 'This menu selection will allow you to change the  ';
  735.  info_line2 := 'comment field of any filename in the data base.   ';
  736.  info_line3 := 'Just click on this menu item and a box will appear';
  737.  info_line4 := 'on the screen asking for the filename.            ';
  738.  info_line5 := '                    CAUTION                       ';
  739.  info_line6 := '      THE FILENAME MUST BE AN EXACT MATCH.        ';
  740.  data_box;
  741.  title_line := 'The " EDIT COMMENT " Menu item   cont...';
  742.  info_line1 := 'After you have entered the filename click on the  ';
  743.  info_line2 := 'OK button. The comments box will appear on the    ';
  744.  info_line3 := 'screen. The current comment if any will appear on ';
  745.  info_line4 := 'the editable line on the bottom of the box. If you';
  746.  info_line5 := 'want to change the comment just backspace over it ';
  747.  info_line6 := 'and reenter what you want it to say or you can    ';
  748.  data_box;
  749.  title_line := 'The " EDIT COMMENT " Menu item   cont...';
  750.  info_line1 := 'click on any one of the predefined comments. If   ';
  751.  info_line2 := 'you choose not to change the comment just hit     ';
  752.  info_line3 := 'return on the keyboard and the field will be left ';
  753.  info_line4 := 'unchanged.                                        ';
  754.  info_line5 := 'NOTE:       THIS FUNCTION WILL SEARCH FOR ALL     ';
  755.  info_line6 := '            OCCURENCES OF A FILE.                 ';
  756.  data_box;
  757.  title_line := 'The " EDIT COMMENT " Menu item   cont...';
  758.  info_line1 := 'Another way to edit a comment field is to double  ';
  759.  info_line2 := 'click the mouse pointer over the filename of your ';
  760.  info_line3 := 'choice. A dialog box will appear asking if you    ';
  761.  info_line4 := 'like to place the file in the print buffer or edit';
  762.  info_line5 := 'the comment field. If you choose comment follow   ';
  763.  info_line6 := 'previous instructions.                            ';
  764.  data_box;
  765. end;
  766.  
  767. PROCEDURE SAVE_DB;
  768.  
  769.    VAR HANDLE,X,Y,Z,Q,F,F1 : INTEGER;
  770.        NBYTES,ERR : LONG_INTEGER;
  771.        BUF : BUF_TYPE;
  772.        FN : STR255;
  773.  
  774.    BEGIN
  775.     IF GET_IN_FILE(PATH_NM,FULL_NAME) THEN
  776.      BEGIN
  777.       FN := FULL_NAME;
  778.       X := 0;
  779.       Y := 1;
  780.       WHILE X <= LENGTH(FN) DO
  781.        BEGIN
  782.        FULL_NAME[X] := FN[Y];
  783.        X := X +1;
  784.        Y := Y +1;
  785.        END;
  786.       FULL_NAME[X] := CHR(0);
  787.       HANDLE := GEM_CREATE(FULL_NAME,0);
  788.         NBYTES := 3;
  789.         BUF[0] := 'D';
  790.         BUF[1] := 'I';
  791.         BUF[2] := 'R';
  792.         ERR := GEM_WRITE(HANDLE,NBYTES,BUF);
  793.         NBYTES := 2;
  794.         ERR := GEM_WRITEI(HANDLE,NBYTES,LAST_LINE);
  795.         ERR := GEM_WRITEI(HANDLE,NBYTES,LAST_DISK);
  796.         IF TITLE_BAR = FALSE THEN
  797.          F := 1
  798.         ELSE
  799.          F := 2;
  800.         IF COLOR_FLAG THEN
  801.          F1 := 1
  802.         ELSE
  803.          F1 := 2;
  804.         ERR := GEM_WRITEI(HANDLE,NBYTES,F);
  805.         ERR := GEM_WRITEI(HANDLE,NBYTES,F1);
  806.         IF ERR >= 0 THEN
  807.          BEGIN
  808.          FOR X := 0 TO LAST_LINE DO
  809.           BEGIN
  810.            FOR Q := 0 TO 85 DO
  811.             BUF[Q] := ' ';
  812.            Z := 0;
  813.            FOR Y := 1 TO LENGTH(BLDN[SINDX[X]]) DO
  814.             BEGIN
  815.              BUF[Z] := BLDN[SINDX[X],Y];
  816.              Z := Z +1;
  817.             END;
  818.            Z := 5;
  819.            FOR Y := 1 TO LENGTH(BLAT[SINDX[X]]) DO
  820.             BEGIN
  821.              BUF[Z] := BLAT[SINDX[X],Y];
  822.              Z := Z +1;
  823.             END;
  824.            Z := 8;
  825.            FOR Y := 1 TO LENGTH(BLNAME[SINDX[X]]) DO
  826.             BEGIN
  827.              BUF[Z] := BLNAME[SINDX[X],Y];
  828.              Z := Z +1;
  829.             END;
  830.            Z := 23;
  831.            FOR Y := 1 TO LENGTH(BLDATE[SINDX[X]]) DO
  832.             BEGIN
  833.              BUF[Z] := BLDATE[SINDX[X],Y];
  834.              Z := Z +1;
  835.             END;
  836.            Z := 34;
  837.            FOR Y := 1 TO LENGTH(BLFOLD[SINDX[X]]) DO
  838.             BEGIN
  839.              BUF[Z] := BLFOLD[SINDX[X],Y];
  840.              Z := Z +1;
  841.             END;
  842.            Z := 49;
  843.            FOR Y := 1 TO LENGTH(BLCOMM[SINDX[X]]) DO
  844.             BEGIN
  845.              BUF[Z] := BLCOMM[SINDX[X],Y];
  846.              Z := Z +1;
  847.             END;
  848.            NBYTES := 80;
  849.            ERR := GEM_WRITE(HANDLE,NBYTES,BUF)
  850.           END;
  851.          END;
  852.      GEM_CLOSE(HANDLE);
  853.      END;
  854.    END;
  855.  
  856.  
  857.  
  858. PROCEDURE QSORT( START,TOP,X : INTEGER );
  859.  
  860.   TYPE STANDARY = ARRAY [0..1000] OF STRING[26];
  861.        SUBARY = ARRAY [0..4] OF STRING[26];
  862.   VAR sarray : array [0..1000] of string[26];
  863.  
  864.     PROCEDURE XFER(TOP,FIELD : INTEGER);
  865.  
  866.       VAR I,X,Y,Z : INTEGER;
  867.           TEMP : STRING[30];
  868.  
  869.       BEGIN
  870.        CASE FIELD OF
  871.         1: FOR I := 0 TO TOP DO
  872.             SARRAY[SINDX[I]] := BLDN[SINDX[I]];
  873.         2: FOR I := 0 TO TOP DO
  874.             SARRAY[SINDX[I]] := BLNAME[SINDX[I]];
  875.         3: FOR I := 0 TO TOP DO
  876.             BEGIN
  877.             TEMP[1] := BLDATE[SINDX[I],7];
  878.             TEMP[2] := BLDATE[SINDX[I],8];
  879.             TEMP[3] := BLDATE[SINDX[I],1];
  880.             TEMP[4] := BLDATE[SINDX[I],2];
  881.             TEMP[5] := BLDATE[SINDX[I],4];
  882.             TEMP[6] := BLDATE[SINDX[I],5];
  883.             TEMP[0] := CHR(6);
  884.             SARRAY[SINDX[I]] := TEMP;
  885.             END;
  886.         4: FOR I := 0 TO TOP DO
  887.             SARRAY[SINDX[I]] := BLFOLD[SINDX[I]];
  888.         5: FOR I := 0 TO TOP DO
  889.             SARRAY[SINDX[I]] := BLCOMM[SINDX[I]];
  890.         6: FOR I := 0 TO TOP DO
  891.             BEGIN
  892.              X := POS( '.',BLNAME[SINDX[I]] );
  893.              IF X = 0 THEN
  894.               TEMP := '   '
  895.              ELSE
  896.               BEGIN
  897.                Y := LENGTH( BLNAME[SINDX[I]] );
  898.                Z := 1;
  899.                WHILE X <= Y DO
  900.                 BEGIN
  901.                  TEMP[Z] := BLNAME[SINDX[I],X];
  902.                  X:= X+1;
  903.                  Z:= Z+1;
  904.                 END;
  905.                TEMP[0] := CHR(Z - 1);
  906.               END;
  907.              SARRAY[SINDX[I]] := TEMP;
  908.             END;
  909.         END;
  910.        END;
  911.  
  912.     PROCEDURE SWAP( A,B : INTEGER );
  913.       VAR C : INTEGER;
  914.       BEGIN
  915.       C := SINDX[A];
  916.       SINDX[A] := SINDX[B];
  917.       SINDX[B] := C;
  918.       END;
  919.  
  920.  PROCEDURE BSORT(START,TOP:INTEGER; VAR ARRY : STANDARY );
  921.  
  922.    VAR INDEX : INTEGER;
  923.       SWITCHED : BOOLEAN;
  924.  
  925.   BEGIN
  926.    REPEAT
  927.     SWITCHED := FALSE;
  928.     FOR INDEX := START TO TOP -1 DO
  929.      BEGIN
  930.       IF ARRY[sindx[INDEX]] > ARRY[sindx[INDEX+1]] THEN
  931.        BEGIN
  932.         SWAP(INDEX,INDEX+1);
  933.         SWITCHED := TRUE;
  934.        END;
  935.      END;
  936.    UNTIL SWITCHED = FALSE;
  937.   END;
  938.  PROCEDURE BSORTA(START,TOP:INTEGER; VAR ARRY: SUBARY);
  939.  
  940.    VAR INDEX : INTEGER;
  941.       SWITCHED : BOOLEAN;
  942.  
  943.   BEGIN
  944.    REPEAT
  945.     SWITCHED := FALSE;
  946.     FOR INDEX := START TO TOP -1 DO
  947.      BEGIN
  948.       IF ARRY[INDEX] > ARRY[INDEX+1] THEN
  949.        BEGIN
  950.         SWAP(INDEX,INDEX+1);
  951.         SWITCHED := TRUE;
  952.        END;
  953.      END;
  954.    UNTIL SWITCHED = FALSE;
  955.   END;
  956.  
  957.   PROCEDURE FINDMED(START,TOP:INTEGER;VAR ARRY: STANDARY );
  958.  
  959.    VAR MIDDLE : INTEGER;
  960.        SORTED : ARRAY [0..4] OF STRING[26];
  961.  
  962.    BEGIN
  963.     MIDDLE := (START + TOP) DIV 2;
  964.     SORTED[1] := ARRY[SINDX[START]];
  965.     SORTED[2] := ARRY[SINDX[TOP]];
  966.     SORTED[3] := ARRY[SINDX[MIDDLE]];
  967.     BSORTA(1,3,SORTED);
  968.     IF SORTED[3] = ARRY[SINDX[MIDDLE]] THEN
  969.        SWAP(SINDX[START],SINDX[MIDDLE])
  970.      ELSE IF SORTED[2] = ARRY[SINDX[TOP]] THEN
  971.        SWAP(SINDX[START],SINDX[TOP]);
  972.    END;
  973.  
  974.    PROCEDURE SORTSECTION( START,TOP : INTEGER );
  975.  
  976.     VAR SWAPUP : BOOLEAN;
  977.         S,E,M : INTEGER;
  978.  
  979.     BEGIN
  980.      IF START- TOP < 20 THEN
  981.        BSORT(START,TOP,SARRAY)
  982.      ELSE
  983.       BEGIN
  984.        FINDMED(START,TOP,SARRAY);
  985.        SWAPUP := TRUE;
  986.        S := START;
  987.        E := TOP;
  988.        M := START;
  989.        WHILE E > S DO
  990.          BEGIN
  991.           IF SWAPUP = TRUE THEN
  992.            BEGIN
  993.             WHILE (SARRAY[SINDX[E]] >= SARRAY[SINDX[M]]) AND (E>M) DO
  994.              E := E-1;
  995.             IF E > M THEN
  996.               BEGIN
  997.                SWAP(SINDX[E],SINDX[M]);
  998.                M := E;
  999.               END;
  1000.             SWAPUP := FALSE;
  1001.            END
  1002.          ELSE
  1003.            BEGIN
  1004.             WHILE (SARRAY[SINDX[S]] <= SARRAY[SINDX[M]]) AND (S<M) DO
  1005.              S := S+1;
  1006.             IF S<M THEN
  1007.              BEGIN
  1008.               SWAP(SINDX[S],SINDX[M]);
  1009.               M := S;
  1010.              END;
  1011.             SWAPUP := TRUE;
  1012.            END;
  1013.          END;
  1014.       SORTSECTION(START,M-1);
  1015.       SORTSECTION(M+1,TOP);
  1016.       END;
  1017.     END;
  1018.  
  1019.   BEGIN                   (* QSORT *)
  1020.    XFER(TOP,X);
  1021.    SORTSECTION(START,TOP);
  1022.   END;                    (* QSORT *)
  1023.  
  1024. PROCEDURE VSSIZE( TOTAL_LINES : REAL );
  1025.  VAR SCRN_SIZE,tl : REAL;
  1026.  
  1027.   BEGIN
  1028.    tl := total_lines;
  1029.    SYS_FONT_SIZE(CW,CH,bw,bh) ;
  1030.    WORK_RECT( HANDLE,SX,SY,SW,SH );
  1031.    scrn_size := sh div bh;
  1032.    IF TOTAL_LINES < SCRN_SIZE THEN tl := SCRN_SIZE;
  1033.    vslsize := ROUND((SCRN_SIZE / tl) * 1000);
  1034.    wind_set(handle,wf_vslsize,vslsize,dummy,dummy,dummy);
  1035.   END;
  1036.  
  1037. PROCEDURE VSPOS( CUR_LOC : INTEGER );
  1038.  VAR ADJ,J,TL : REAL;
  1039.      VSP : INTEGER;
  1040.  
  1041.   BEGIN
  1042.     BEGIN
  1043.      TL := TOTAL_LINES;
  1044.      IF TL >= 14 THEN TL := TL - 14;
  1045.      IF TL > 0 THEN
  1046.       BEGIN
  1047.        ADJ := 1000 / TL;
  1048.        J := CUR_LOC;
  1049.        VSP := ROUND(J * ADJ);
  1050.        WIND_SET(HANDLE,WF_VSLIDE,VSP,DUMMY,DUMMY,DUMMY);
  1051.       END;
  1052.     END;
  1053.   END;
  1054.  
  1055. PROCEDURE SIZE_WINDOW( HANDLE : INTEGER );
  1056.  
  1057.   BEGIN
  1058.    SET_WSIZE( HANDLE,LAST_SX,LAST_SY,LAST_SW,LAST_SH );
  1059.    last_sx := wx;
  1060.    last_sy := wy;
  1061.    last_sw := ww;
  1062.    last_sh := wh;
  1063.    wind_get(handle,wf_prevxywh,wx,wy,ww,wh);
  1064.    WORK_RECT( HANDLE,SX,SY,SW,SH );
  1065.    VSSIZE( TOTAL_LINES );
  1066.    VSPOS( CUR_LOC );
  1067.   END;
  1068.  
  1069. PROCEDURE MOVE_WINDOW( HANDLE,X,Y,W,H : INTEGER );
  1070.  
  1071.   BEGIN
  1072.    last_sx := wx;
  1073.    last_sy := wy;
  1074.    last_sw := ww;
  1075.    last_sh := wh;
  1076.    SET_WSIZE( HANDLE, X, Y, W, H );
  1077.    WORK_RECT( HANDLE,SX,SY,SW,SH );
  1078.    wind_get(handle,wf_prevxywh,wx,wy,ww,wh);
  1079.   END;
  1080.  
  1081. PROCEDURE CLOSE_BTN(HANDLE : INTEGER );
  1082.  
  1083.    VAR ALERT23 :STR255;
  1084.  
  1085.   BEGIN
  1086.       ALERT23 := '[2][ARE YOU SURE YOU WANT TO QUIT ?][ NO | YES ]';
  1087.       FLAG1 := DO_ALERT(ALERT23,1);
  1088.   END;
  1089.  
  1090.  
  1091. PROCEDURE SET_TITLE_BAR( X : INTEGER );
  1092.  
  1093.    VAR Y : INTEGER;
  1094.        STR1,STR2,STR3,STR4,STR5,STR6 : STR255;
  1095.  
  1096.    BEGIN
  1097.     CASE X OF
  1098.      1: BEGIN
  1099.          WItitle :=
  1100.                ' D# |F |FILENAME     |DATE     |FOLDER         |COMMENTS.... ';
  1101.          Set_WInfo(Handle,WItitle);
  1102.          MENU_CHECK(MENU,LAYOUT_ITEM,TRUE);
  1103.          MENU_CHECK(MENU,STAT_ITEM,FALSE);
  1104.          TITLE_BAR := FALSE;
  1105.         END;
  1106.  
  1107.      2: BEGIN
  1108.          STR(LAST_LINE ,TOTL);
  1109.          Y := 1000 - LAST_LINE;
  1110.          STR(Y,LEFT);
  1111.          STR1 := 'TOTAL FILES > ';
  1112.          STR2 := ' |CURENT LINE > ';
  1113.          STR5 := ' |FREE SPACE > ';
  1114.          STR3 := ' |LAST DISK # > ';
  1115.          STR(LAST_DISK,STR6);
  1116.          STR(CUR_LOC,STR4);
  1117.          WITITLE := CONCAT(STR1,TOTL,STR2,STR4,STR3,STR6,STR5,LEFT);
  1118.          Set_WInfo(Handle,WItitle);
  1119.          MENU_CHECK(MENU,LAYOUT_ITEM,FALSE);
  1120.          MENU_CHECK(MENU,STAT_ITEM,TRUE);
  1121.          TITLE_BAR := TRUE;
  1122.         END;
  1123.      END;
  1124.    END;
  1125.  
  1126.  
  1127. PROCEDURE PRNT_SCR;
  1128.  
  1129. VAR N,MAX,LP,ADJ,ch1,cnt : INTEGER;
  1130.  
  1131.   BEGIN
  1132.    hide_mouse;
  1133.    ch1 := BH;
  1134.    MAX := SH DIV BH ;
  1135.    ADJ := SY + CH1 - 2;
  1136.    paint_rect(sx-1,sy-4,sw+1,sh+4);
  1137.    cnt := cur_loc;
  1138.    FOR N := 0 TO MAX DO
  1139.     BEGIN
  1140.      LP := (CH1 * N) + ADJ ;
  1141.      DRAW_STRING(SX,LP,BLdn[SINDX[cnt]]) ;
  1142.      DRAW_STRING(SX+(5*CW),LP,BLAT[SINDX[cnt]]) ;
  1143.      DRAW_STRING(SX+(8*cw),LP,BLname[SINDX[cnt]]) ;
  1144.      DRAW_STRING(SX+(22*cw),LP,BLdate[SINDX[cnt]]) ;
  1145.      DRAW_STRING(SX+(32*cw),LP,BLfold[SINDX[cnt]]) ;
  1146.      DRAW_STRING(SX+(48*cw),LP,BLcomm[SINDX[cnt]]) ;
  1147.      cnt := cnt + 1;
  1148.     END;
  1149.     IF TITLE_BAR = FALSE THEN SET_TITLE_BAR(1);
  1150.     IF TITLE_BAR = TRUE THEN SET_TITLE_BAR(2);
  1151.     show_mouse;
  1152.   END;
  1153.  
  1154.  
  1155. PROCEDURE ADD_COM_BOX ;
  1156.  
  1157.  
  1158. VAR
  1159.    PSA,PSB,PSC : STR255;
  1160.  
  1161.      begin
  1162.       PSA := '_________________________';
  1163.       PSB := 'XXXXXXXXXXXXXXXXXXXXXXXXX';
  1164.       PSC := '';
  1165.       ACB := NEW_DIALOG(21,0,0,45,19);
  1166.       ACB_PROMT1 := ADD_DITEM(ACB,G_STRING,NONE,5,1,0,0,0,0);
  1167.       SET_DTEXT(ACB,ACB_PROMT1,'FILENAME:',SYSTEM_FONT,TE_LEFT);
  1168.       ACB_PROMT := ADD_DITEM(ACB,G_STRING,NONE,20,1,0,0,0,0);
  1169.       SET_DTEXT(ACB,ACB_PROMT,'--------------',SYSTEM_FONT,TE_LEFT);
  1170.       ACB_PROMT2 := ADD_DITEM(ACB,G_STRING,NONE,5,3,0,0,0,0);
  1171.       SET_DTEXT(ACB,ACB_PROMT2,'Choose a Comment :',SYSTEM_FONT,TE_LEFT);
  1172.      ACB_BOX1 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,5,5,10,1,-1,$1180);
  1173.       SET_DTEXT(ACB,ACB_BOX1,'GAME/ENT',SYSTEM_FONT,TE_CENTER);
  1174.     ACB_BOX2 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,17,5,10,1,-1,$1180);
  1175.       SET_DTEXT(ACB,ACB_BOX2,'ART/VID ',SYSTEM_FONT,TE_CENTER);
  1176.    ACB_BOX21 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,29,5,10,1,-1,$1180);
  1177.       SET_DTEXT(ACB,ACB_BOX21,'DEMO',SYSTEM_FONT,TE_CENTER);
  1178.      ACB_BOX3 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,5,7,10,1,-1,$1180);
  1179.       SET_DTEXT(ACB,ACB_BOX3,'UTILITY ',SYSTEM_FONT,TE_CENTER);
  1180.     ACB_BOX4 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,17,7,10,1,-1,$1180);
  1181.       SET_DTEXT(ACB,ACB_BOX4,'TELECOM ',SYSTEM_FONT,TE_CENTER);
  1182.    ACB_BOX41 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,29,7,10,1,-1,$1180);
  1183.       SET_DTEXT(ACB,ACB_BOX41,'DATA',SYSTEM_FONT,TE_CENTER);
  1184.      ACB_BOX5 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,5,9,10,1,-1,$1180);
  1185.       SET_DTEXT(ACB,ACB_BOX5,'LANGUAGE',SYSTEM_FONT,TE_CENTER);
  1186.     ACB_BOX6 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,17,9,10,1,-1,$1180);
  1187.       SET_DTEXT(ACB,ACB_BOX6,'DOCUMENT',SYSTEM_FONT,TE_CENTER);
  1188.    ACB_BOX61 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,29,9,10,1,-1,$1180);
  1189.       SET_DTEXT(ACB,ACB_BOX61,'DESK ACC',SYSTEM_FONT,TE_CENTER);
  1190.     ACB_BOX7 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,5,11,10,1,-1,$1180);
  1191.       SET_DTEXT(ACB,ACB_BOX7,'BUSINESS',SYSTEM_FONT,TE_CENTER);
  1192.    ACB_BOX8 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,17,11,10,1,-1,$1180);
  1193.       SET_DTEXT(ACB,ACB_BOX8,'FOLDER',SYSTEM_FONT,TE_CENTER);
  1194.   ACB_BOX81 := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,29,11,10,1,-1,$1180);
  1195.       SET_DTEXT(ACB,ACB_BOX81,'NONE',SYSTEM_FONT,TE_CENTER);
  1196.       ACB_PROMT3 := ADD_DITEM(ACB,G_STRING,NONE,5,13,0,0,0,0);
  1197.       SET_DTEXT(ACB,ACB_PROMT3,'or enter your own :',SYSTEM_FONT,TE_LEFT);
  1198.       ACB_GET := ADD_DITEM(ACB,G_FTEXT,DEFAULT,5,15,25,1,0,$1180);
  1199.       SET_DEDIT(ACB,ACB_GET,PSA,PSB,SHW_BOX_STR,SYSTEM_FONT,TE_CENTER);
  1200.  ACB_CANCEL := ADD_DITEM(ACB,G_BUTTON,SELECTABLE|EXIT_BTN,5,17,35,1,-1,$1180);
  1201.      SET_DTEXT(ACB,ACB_CANCEL,'-------CANCEL--------',SYSTEM_FONT,TE_CENTER);
  1202.       END;
  1203.  
  1204. FUNCTION SHOW_COM_BOX( NAME : STR255 ): BOOLEAN;
  1205.  
  1206.       BEGIN
  1207.        ADD_COM_BOX;
  1208.        SET_DTEXT(ACB,ACB_PROMT,NAME,SYSTEM_FONT,TE_LEFT);
  1209.        CENTER_DIALOG(ACB);
  1210.        DUMMY := DO_DIALOG(ACB,ACB_GET);
  1211.        GET_DEDIT(ACB,ACB_GET,SHW_BOX_STR);
  1212.        IF OBJ_STATE(ACB,ACB_GET) & SELECTED <> 0 THEN
  1213.         BEGIN
  1214.          OBJ_SETSTATE(ACB,ACB_GET,NONE,TRUE);
  1215.          SHOW_COM_BOX := TRUE;
  1216.         END;
  1217.        IF OBJ_STATE(ACB,ACB_BOX1) & SELECTED <> 0 THEN
  1218.         BEGIN
  1219.          OBJ_SETSTATE(ACB,ACB_BOX1,NONE,TRUE);
  1220.          SHW_BOX_STR := 'GAMES AND ENTERTAINMENT';
  1221.          SHOW_COM_BOX := TRUE;
  1222.         END;
  1223.        IF OBJ_STATE(ACB,ACB_BOX2) & SELECTED <> 0 THEN
  1224.         BEGIN
  1225.          OBJ_SETSTATE(ACB,ACB_BOX2,NONE,TRUE);
  1226.          SHW_BOX_STR := 'ART / VIDEO';
  1227.          SHOW_COM_BOX := TRUE;
  1228.         END;
  1229.        IF OBJ_STATE(ACB,ACB_BOX21) & SELECTED <> 0 THEN
  1230.         BEGIN
  1231.          OBJ_SETSTATE(ACB,ACB_BOX21,NONE,TRUE);
  1232.          SHW_BOX_STR := 'DEMONSTRATION PROGRAM';
  1233.          SHOW_COM_BOX := TRUE;
  1234.         END;
  1235.        IF OBJ_STATE(ACB,ACB_BOX3) & SELECTED <> 0 THEN
  1236.         BEGIN
  1237.          OBJ_SETSTATE(ACB,ACB_BOX3,NONE,TRUE);
  1238.          SHW_BOX_STR := 'UTILITY PROGRAM';
  1239.          SHOW_COM_BOX := TRUE;
  1240.         END;
  1241.        IF OBJ_STATE(ACB,ACB_BOX4) & SELECTED <> 0 THEN
  1242.         BEGIN
  1243.          OBJ_SETSTATE(ACB,ACB_BOX4,NONE,TRUE);
  1244.          SHW_BOX_STR := 'TELECOM PROGRAM';
  1245.          SHOW_COM_BOX := TRUE;
  1246.         END;
  1247.        IF OBJ_STATE(ACB,ACB_BOX41) & SELECTED <> 0 THEN
  1248.         BEGIN
  1249.          OBJ_SETSTATE(ACB,ACB_BOX41,NONE,TRUE);
  1250.          SHW_BOX_STR := 'DATA FILE';
  1251.          SHOW_COM_BOX := TRUE;
  1252.         END;
  1253.        IF OBJ_STATE(ACB,ACB_BOX5) & SELECTED <> 0 THEN
  1254.         BEGIN
  1255.          OBJ_SETSTATE(ACB,ACB_BOX5,NONE,TRUE);
  1256.          SHW_BOX_STR := 'PROGRAMMING LANGUAGE';
  1257.          SHOW_COM_BOX := TRUE;
  1258.         END;
  1259.        IF OBJ_STATE(ACB,ACB_BOX6) & SELECTED <> 0 THEN
  1260.         BEGIN
  1261.          OBJ_SETSTATE(ACB,ACB_BOX6,NONE,TRUE);
  1262.          SHW_BOX_STR := 'DOCUMENT FILE';
  1263.          SHOW_COM_BOX := TRUE;
  1264.         END;
  1265.        IF OBJ_STATE(ACB,ACB_BOX61) & SELECTED <> 0 THEN
  1266.         BEGIN
  1267.          OBJ_SETSTATE(ACB,ACB_BOX61,NONE,TRUE);
  1268.          SHW_BOX_STR := 'DESK ACCESSORY PROGRAM';
  1269.          SHOW_COM_BOX := TRUE;
  1270.         END;
  1271.        IF OBJ_STATE(ACB,ACB_BOX7) & SELECTED <> 0 THEN
  1272.         BEGIN
  1273.          OBJ_SETSTATE(ACB,ACB_BOX7,NONE,TRUE);
  1274.          SHW_BOX_STR := 'BUSINESS APPLICATION';
  1275.          SHOW_COM_BOX := TRUE;
  1276.         END;
  1277.        IF OBJ_STATE(ACB,ACB_BOX8) & SELECTED <> 0 THEN
  1278.         BEGIN
  1279.          OBJ_SETSTATE(ACB,ACB_BOX8,NONE,TRUE);
  1280.          SHW_BOX_STR := 'SYSTEM FOLDER';
  1281.          SHOW_COM_BOX := TRUE;
  1282.         END;
  1283.        IF OBJ_STATE(ACB,ACB_BOX81) & SELECTED <> 0 THEN
  1284.         BEGIN
  1285.          OBJ_SETSTATE(ACB,ACB_BOX81,NONE,TRUE);
  1286.          SHW_BOX_STR := '                         ';
  1287.          SHOW_COM_BOX := TRUE;
  1288.         END;
  1289.        IF OBJ_STATE(ACB,ACB_CANCEL) & SELECTED <> 0 THEN
  1290.         BEGIN
  1291.          OBJ_SETSTATE(ACB,ACB_CANCEL,NONE,TRUE);
  1292.          SHOW_COM_BOX := FALSE;
  1293.         END;
  1294.         UPERCASE(SHW_BOX_STR);
  1295.         END_DIALOG(ACB);
  1296.         DELETE_DIALOG(ACB);
  1297.        END;
  1298.  
  1299.  
  1300.  
  1301. PROCEDURE ADDCOM;
  1302.  
  1303.       VAR X : INTEGER;
  1304.           FLAG,Y : BOOLEAN;
  1305.  
  1306.       BEGIN
  1307.       IF COM_FLAG THEN
  1308.        BEGIN
  1309.        SHW_BOX_STR := '';
  1310.        FLAG := TRUE;
  1311.        X := CUR_LOC;
  1312.        REPEAT
  1313.         Y := SHOW_COM_BOX(BLNAME[X]);
  1314.         IF Y = TRUE THEN
  1315.           BEGIN
  1316.            BLCOMM[X] := SHW_BOX_STR;
  1317.           END
  1318.          ELSE FLAG := FALSE;
  1319.         X := X + 1;
  1320.         IF X = LAST_LINE THEN FLAG := FALSE;
  1321.        UNTIL FLAG = FALSE;
  1322.        SET_CLIP(SX,SY,SW,SH);
  1323.        PRNT_SCR;
  1324.        END;
  1325.       END;
  1326.  
  1327.  
  1328. PROCEDURE SEARCH(X : INTEGER);
  1329.  
  1330.     VAR Y,Z :INTEGER;
  1331.  
  1332.     BEGIN
  1333.      IF LAST_LINE >= 2 THEN
  1334.      BEGIN
  1335.      Y:= CUR_LOC +1;
  1336.      SEARCH_FLAG := FALSE;
  1337.      CASE X OF
  1338.        1: BEGIN
  1339.            REPEAT
  1340.             Z := POS(SHW_BOX_STR,BLNAME[SINDX[Y]]);
  1341.             IF Z <> 0 THEN
  1342.              BEGIN
  1343.              CUR_LOC := Y;
  1344.              Y := LAST_LINE;
  1345.              SEARCH_FLAG := TRUE;
  1346.              END
  1347.             ELSE
  1348.              BEGIN
  1349.              Y := Y + 1;
  1350.              IF Y > LAST_LINE THEN Y := LAST_LINE;
  1351.              END;
  1352.            UNTIL Y = LAST_LINE;
  1353.           END;
  1354.        2: BEGIN
  1355.            REPEAT
  1356.             Z := POS(SHW_BOX_STR,BLNAME[SINDX[Y]]);
  1357.             IF Z <> 0 THEN
  1358.              BEGIN
  1359.              CUR_LOC := Y;
  1360.              Y := LAST_LINE;
  1361.              SEARCH_FLAG := TRUE;
  1362.              END
  1363.             ELSE
  1364.              BEGIN
  1365.              Y := Y + 1;
  1366.              IF Y > LAST_LINE THEN Y := LAST_LINE;
  1367.              END;
  1368.            UNTIL Y = LAST_LINE;
  1369.           END;
  1370.        3: BEGIN
  1371.            INSERT('/',SHW_BOX_STR,3);
  1372.            INSERT('/',SHW_BOX_STR,6);
  1373.            REPEAT
  1374.             Z := POS(SHW_BOX_STR,BLDATE[SINDX[Y]]);
  1375.             IF Z <> 0 THEN
  1376.              BEGIN
  1377.              CUR_LOC := Y;
  1378.              Y := LAST_LINE;
  1379.              SEARCH_FLAG := TRUE;
  1380.              END
  1381.             ELSE
  1382.              BEGIN
  1383.              Y := Y + 1;
  1384.              IF Y > LAST_LINE THEN Y := LAST_LINE;
  1385.              END;
  1386.            UNTIL Y = LAST_LINE;
  1387.           END;
  1388.        4: BEGIN
  1389.            REPEAT
  1390.             Z := POS(SHW_BOX_STR,BLDN[SINDX[Y]]);
  1391.             IF Z <> 0 THEN
  1392.              BEGIN
  1393.              CUR_LOC := Y;
  1394.              Y := LAST_LINE;
  1395.              SEARCH_FLAG := TRUE;
  1396.              END
  1397.             ELSE
  1398.              BEGIN
  1399.              Y := Y + 1;
  1400.              IF Y > LAST_LINE THEN Y := LAST_LINE;
  1401.              END;
  1402.            UNTIL Y = LAST_LINE;
  1403.           END;
  1404.        5: BEGIN
  1405.            REPEAT
  1406.             Z := POS(SHW_BOX_STR,BLFOLD[SINDX[Y]]);
  1407.             IF Z <> 0 THEN
  1408.              BEGIN
  1409.              CUR_LOC := Y;
  1410.              Y := LAST_LINE;
  1411.              SEARCH_FLAG := TRUE;
  1412.              END
  1413.             ELSE
  1414.              BEGIN
  1415.              Y := Y + 1;
  1416.              IF Y > LAST_LINE THEN Y := LAST_LINE;
  1417.              END;
  1418.            UNTIL Y = LAST_LINE;
  1419.           END;
  1420.        6: BEGIN
  1421.            REPEAT
  1422.             Z := POS(SHW_BOX_STR,BLCOMM[SINDX[Y]]);
  1423.             IF Z <> 0 THEN
  1424.              BEGIN
  1425.              CUR_LOC := Y;
  1426.              Y := LAST_LINE;
  1427.              SEARCH_FLAG := TRUE;
  1428.              END
  1429.             ELSE
  1430.              BEGIN
  1431.              Y := Y + 1;
  1432.              IF Y > LAST_LINE THEN Y := LAST_LINE;
  1433.              END;
  1434.            UNTIL Y = LAST_LINE;
  1435.           END;
  1436.        END;
  1437.      END;
  1438.    END;
  1439.  
  1440. PROCEDURE PUT_IN_BUF( DNSTR,ATMRK,NAMES,DATESTR,FOLDER : STR255);
  1441.  
  1442.     BEGIN
  1443.      TEMP_BLdn[COUNT] := DNSTR;
  1444.      TEMP_BLAT[COUNT] := ATMRK;
  1445.      TEMP_BLname[COUNT] := names;
  1446.      TEMP_BLdate[COUNT] := DATESTR;
  1447.      IF FOLDER = '' THEN
  1448.      TEMP_BLfold[COUNT] := '--------------'
  1449.        ELSE
  1450.      TEMP_BLFOLD[COUNT] := FOLDER;
  1451.      COUNT := COUNT +1;
  1452.     END;
  1453.  
  1454. PROCEDURE XFER_CHECK;
  1455.  
  1456.    VAR X,Z : INTEGER;
  1457.  
  1458.    BEGIN
  1459.     IF (LINE_COUNT + COUNT) <= 1000 THEN
  1460.     BEGIN
  1461.      ADD_FLAG := TRUE;
  1462.      CUR_LOC := LINE_COUNT;
  1463.      FOR X:= 0 TO COUNT -1 DO
  1464.        BEGIN
  1465.         BLDN[LINE_COUNT] := TEMP_BLDN[X];
  1466.         BLAT[LINE_COUNT] := TEMP_BLAT[X];
  1467.         BLNAME[LINE_COUNT] := TEMP_BLNAME[X];
  1468.         BLDATE[LINE_COUNT] := TEMP_BLDATE[X];
  1469.         BLFOLD[LINE_COUNT] := TEMP_BLFOLD[X];
  1470.         LINE_COUNT := LINE_COUNT +1;
  1471.        END;
  1472.        TOTAL_LINES := LINE_COUNT;
  1473.        LAST_LINE := LINE_COUNT;
  1474.        END
  1475.       ELSE
  1476.        BEGIN
  1477.        Z := DO_ALERT('[3][THIS DISK EXCEEDS|THE 1000 FILE LIMIT][ ABORT ]',1);
  1478.        ADD_FLAG := FALSE;
  1479.        END;
  1480.     END;
  1481.  
  1482. FUNCTION COMPARE(X,Y,Z : INTEGER) : BOOLEAN;
  1483.  
  1484.    BEGIN
  1485.     COMPARE := FALSE;
  1486.     CASE Z OF
  1487.      1: IF TEMP_BLDN[X] = BLDN[Y] THEN COMPARE := TRUE;
  1488.      2: IF TEMP_BLAT[X] = BLAT[Y] THEN COMPARE := TRUE;
  1489.      3: IF TEMP_BLNAME[X] = BLNAME[Y] THEN COMPARE := TRUE;
  1490.      4: IF TEMP_BLDATE[X] = BLDATE[Y] THEN COMPARE := TRUE;
  1491.      5: IF TEMP_BLFOLD[X] = BLFOLD[Y] THEN COMPARE := TRUE;
  1492.     END;
  1493.    END;
  1494.  
  1495.  
  1496. PROCEDURE DEL_FILE( Y : INTEGER );
  1497.  
  1498.   VAR X,Z : INTEGER;
  1499.  
  1500.   BEGIN
  1501.    FOR X := Y TO LAST_LINE DO
  1502.     BEGIN
  1503.      BLDN[X] := BLDN[X +1];
  1504.      BLAT[X] := BLAT[X +1];
  1505.      BLNAME[X] := BLNAME[X +1];
  1506.      BLDATE[X] := BLDATE[X +1];
  1507.      BLFOLD[X] := BLFOLD[X +1];
  1508.      BLCOMM[X] := BLCOMM[X +1];
  1509.     END;
  1510.     LINE_COUNT := LINE_COUNT -1;
  1511.    END;
  1512.  
  1513. PROCEDURE COMP_FILES;
  1514.  
  1515.     VAR C,FLAG : BOOLEAN;
  1516.         Y,X : INTEGER;
  1517.  
  1518.     BEGIN
  1519.      X := 0;
  1520.      Y := 0;
  1521.      C := FALSE;
  1522.      FLAG := TRUE;
  1523.      FOR Y := 0 TO LAST_LINE DO
  1524.      BEGIN
  1525.       REPEAT
  1526.        C := COMPARE(X,Y,1);
  1527.        IF C = TRUE THEN
  1528.        BEGIN
  1529.         DEL_FILE(Y);
  1530.         FLAG := FALSE;
  1531.        END;
  1532.       UNTIL C = FALSE;
  1533.      END;
  1534.      IF FLAG THEN LAST_DISK := LAST_DISK + 1;
  1535.     END;
  1536.  
  1537.  
  1538.  
  1539. PROCEDURE G_DIR;
  1540.  
  1541.   TYPE
  1542.     fn_range = 1..14 ;
  1543.     fnd_range = 1..255;
  1544.     fname = PACKED ARRAY [ fn_range ] OF char ;
  1545.     frec = PACKED RECORD
  1546.              reserved : PACKED ARRAY [ 0..19 ] OF byte ;
  1547.              resvd2 : byte ;
  1548.              attrib : byte ;
  1549.              time_stamp : integer ;
  1550.              date_stamp : integer ;
  1551.              size : long_integer ;
  1552.              name : fname ;
  1553.            END ;
  1554.          PATH_NAME = PACKED ARRAY [1..255] OF CHAR;
  1555.   VAR
  1556.     r : frec ;
  1557.     i : fnd_range;
  1558.     names,QUT : string[14];
  1559.     file_map : array [0..80]of array [0..20] of string[14];
  1560.     attrib_map : array [0..80]of array [0..20] of byte;
  1561.     map_point : array [0..20] of integer;
  1562.     depth,index,x,y,LINDEX : integer;
  1563.     path : path_name ;
  1564.     FN_FLAG : ARRAY[0..20] OF BOOLEAN;
  1565.     LAST_FN : ARRAY[0..20] OF STRING [14];
  1566.     INBUF   : STRING;
  1567.  
  1568.   PROCEDURE set_dta( VAR buf : frec ) ;
  1569.     GEMDOS( $1a ) ;
  1570.  
  1571.   FUNCTION get_first( VAR path : path_name ; search_attrib :integer ):integer ;
  1572.     GEMDOS( $4e ) ;
  1573.  
  1574.   FUNCTION get_next : integer ;
  1575.     GEMDOS( $4f ) ;
  1576.  
  1577.  
  1578.   PROCEDURE EXT_RTN;
  1579.  
  1580.   BEGIN
  1581.     IF ( index <> 0 ) AND ( depth <> 0 ) then
  1582.      begin
  1583.       depth := depth - 1;
  1584.      end;
  1585.   END;
  1586.  
  1587.   PROCEDURE ADD_TO_PATH;
  1588.  
  1589.   VAR PTH : STRING;
  1590.       PTH1 : CHAR;
  1591.     I,X : INTEGER;
  1592.   BEGIN
  1593.    PTH1 := '\';
  1594.    X := POS('*',PATH_STRING);
  1595.    INSERT(pth1,path_string,X);
  1596.    INSERT(FILE_MAP[INDEX,DEPTH],path_string,X );
  1597.    FOR i := 1 TO length( path_string ) DO
  1598.    path[i] := path_string[i] ;
  1599.    path[ length(path_string) + 1] := CHR(0);
  1600.    LINDEX := LINDEX + 1;
  1601.    FN_FLAG[LINDEX] := TRUE;
  1602.    LAST_FN[LINDEX] := FILE_MAP[INDEX,DEPTH];
  1603.   END;
  1604.  
  1605.   PROCEDURE DEL_FROM_PATH;
  1606.  
  1607.    VAR PTH : STRING;
  1608.        I,X : INTEGER;
  1609.  
  1610.    BEGIN
  1611.     IF FN_FLAG[LINDEX] THEN
  1612.      BEGIN
  1613.       X := POS('*',PATH_STRING);
  1614.       Y := X - (LENGTH(LAST_FN[LINDEX])+1);
  1615.       DELETE(path_string,Y,LENGTH(LAST_FN[LINDEX]) + 1);
  1616.       FOR i := 1 TO length( path_string ) DO
  1617.       path[i] := PATH_STRING[i] ;
  1618.       path[ length( path_string ) + 1] := CHR(0);
  1619.       FN_FLAG[LINDEX] := FALSE;
  1620.       LAST_FN[LINDEX] := '';
  1621.       LINDEX := LINDEX - 1;
  1622.      END;
  1623.    END;
  1624.  
  1625.   PROCEDURE HNDL_FILE( VAR r : frec );
  1626.  
  1627.    VAR I,DATE,DATEM,DATED,DATEY,A,B : INTEGER;
  1628.        names,ATMRK : str255;
  1629.        DATESTR,DM,DD,DY,FOLDER :STR255;
  1630.  
  1631.       BEGIN
  1632.         names := '';
  1633.         A := 32;
  1634.         B := 512;
  1635.         WITH r DO
  1636.         begin
  1637.          i := 1;
  1638.          while ( i <= 14 ) AND ( name[i] <> CHR(0)) DO
  1639.            begin
  1640.             names[i] := name[i];
  1641.             i := i + 1;
  1642.            end;
  1643.            names[0] := CHR(i-1);
  1644.            DATE := DATE_STAMP;
  1645.            DATEM := DATE;
  1646.            DATED := DATE;
  1647.            DATEY := DATE;
  1648.          IF (NAMEs <> '.') AND (NAMEs <> '..') THEN
  1649.            BEGIN
  1650.             ATTRIB_MAP[index,DEPTH] := ATTRIB;
  1651.             FILE_MAP[INDEX,DEPTH] := NAMES;
  1652.             i := 1;
  1653.             IF ATTRIB = $10 THEN
  1654.                ATMRK := '* '
  1655.              ELSE
  1656.                ATMRK := '  ';
  1657.             DATEM := DATE & $1E0;
  1658.             DATEM := SHR(DATEM,5);
  1659.             DATEY := DATE & $FE00;
  1660.             DATEY := SHR(DATEY,9);
  1661.             DATED := DATE & $1F;
  1662.             DATEY := DATEY+80;
  1663.             STR(DATEM,DM);
  1664.             STR(DATEY,DY);
  1665.             STR(DATED,DD);
  1666.             A:= LENGTH(DD);
  1667.             B:= LENGTH(DM);
  1668.             IF A = 1 THEN INSERT('0',DD,1);
  1669.             IF B = 1 THEN INSERT('0',DM,1);
  1670.             DATESTR := CONCAT(DM,'/',DD,'/',DY);
  1671.             FOLDER := LAST_FN[LINDEX];
  1672.             PUT_IN_BUF(dnstr,atmrk,names,datestr,FOLDER);
  1673.             INDEX := INDEX + 1;
  1674.            end;
  1675.         end;
  1676.       end;
  1677. PROCEDURE GF_LOOP;
  1678.  
  1679. FORWARD;
  1680.  
  1681. PROCEDURE GET_FILES;
  1682.  
  1683.     BEGIN
  1684.      WHILE ( INDEX <> 0) OR (DEPTH <> 0) DO
  1685.        BEGIN
  1686.         IF GET_FIRST( PATH,$10 ) < 0 THEN
  1687.            EXT_RTN
  1688.         ELSE
  1689.            REPEAT
  1690.              HNDL_FILE( r );
  1691.            UNTIL GET_NEXT < 0;
  1692.           INDEX := INDEX - 1;
  1693.           GF_LOOP;
  1694.         END;
  1695.      END;
  1696.  
  1697. PROCEDURE GF_LOOP;
  1698.  
  1699.   BEGIN
  1700.    WHILE ( INDEX <> 0) OR ( DEPTH <> 0) DO
  1701.     BEGIN
  1702.      IF ATTRIB_MAP[INDEX,DEPTH] = $10 THEN
  1703.       BEGIN
  1704.        MAP_POINT[DEPTH] := INDEX;
  1705.        ADD_TO_PATH;
  1706.        DEPTH := DEPTH + 1;
  1707.        INDEX := 1;
  1708.        GET_FILES;
  1709.       END
  1710.      ELSE
  1711.        BEGIN
  1712.         INDEX := INDEX - 1;
  1713.         IF INDEX > 0 THEN
  1714.           GF_LOOP
  1715.         else
  1716.          begin
  1717.           depth := depth - 1;
  1718.           index := map_point[depth];
  1719.           del_from_path;
  1720.           index := index - 1;
  1721.           gf_loop;
  1722.          end;
  1723.        end;
  1724.      end;
  1725.    END;
  1726.  
  1727.  
  1728.   BEGIN
  1729.     FOR i := 1 TO length( path_string ) DO
  1730.       path[i] := path_string[i] ;
  1731.     path[ length(path_string)+1 ] := chr(0) ;
  1732.     for x := 0 to 80 do
  1733.      BEGIN
  1734.      for y := 0 to 20 do
  1735.       begin
  1736.        file_map[x,y] := '';
  1737.        attrib_map[x,y] := 0;
  1738.       end
  1739.      end;
  1740.     FOR X := 0 TO 20 DO
  1741.       BEGIN
  1742.        LAST_FN[X] := '';
  1743.        FN_FLAG[X] := FALSE;
  1744.       END;
  1745.     LINDEX := 0;
  1746.     depth := 1;
  1747.     index := 1;
  1748.     LINE_COUNT := LAST_LINE;
  1749.     COUNT := 0;
  1750.     for x := 0 to 20 do
  1751.       begin
  1752.        map_point[x] := 1;
  1753.       end;
  1754.     ADD_FLAG := FALSE;
  1755.     set_dta( r ) ;
  1756.     get_files;
  1757.     IF COUNT <> 0 THEN
  1758.      BEGIN
  1759.       COMP_FILES;
  1760.       XFER_CHECK;
  1761.      END;
  1762.   END;
  1763.  
  1764.  
  1765.  
  1766.  
  1767. PROCEDURE DO_REDRAW( MX, MY, MW, MH : INTEGER ) ;
  1768.  
  1769. VAR   RX,RY,RW,RH : INTEGER ;
  1770.  
  1771.  BEGIN
  1772.   Hide_Mouse;
  1773.   BEGIN_UPDATE;
  1774.   First_Rect( handle,RX,RY,RW,RH ) ;
  1775.   WHILE (RW <> 0) AND (RH <> 0) DO
  1776.    BEGIN
  1777.     IF RECT_INTERSECT( MX,MY,MW,MH,RX,RY,RW,RH ) THEN
  1778.           BEGIN
  1779.            SET_CLIP(RX,RY,RW,RH);
  1780.            PRNT_SCR;
  1781.           END;
  1782.        NEXT_RECT( handle,RX,RY,RW,RH );
  1783.    END;
  1784.   END_UPDATE;
  1785.   Show_Mouse;
  1786.  END;
  1787.  
  1788. PROCEDURE COM_CHECK;
  1789.  
  1790. BEGIN
  1791.  IF COM_FLAG = TRUE THEN
  1792.    MENU_CHECK(MENU,COM_ITEM,FALSE)
  1793.  ELSE  MENU_CHECK(MENU,COM_ITEM,TRUE);
  1794.  
  1795.  IF COM_FLAG THEN COM_FLAG := FALSE
  1796.  ELSE COM_FLAG := TRUE ;
  1797. END;
  1798.  
  1799.  
  1800. PROCEDURE Dialog_BOX( x : INTEGER ) ;
  1801.  
  1802.  
  1803. VAR
  1804.   Promt_str,PSa,PSb,PSc : ARRAY [1..6] OF str255  ;
  1805.  
  1806.       BEGIN
  1807.  
  1808.      Promt_str[1] := 'Please Enter NAME :';
  1809.      PSa[1] := '____________';
  1810.      PSb[1] := 'XXXXXXXXXXXX';
  1811.      PSc[1] := '';
  1812.  
  1813.      Promt_str[2] := 'Please Enter TYPE :';
  1814.      PSa[2] := 'FILE.___';
  1815.      PSb[2] := 'FFF';
  1816.      PSc[2] := '';
  1817.  
  1818.      Promt_str[3] := 'Please Enter DATE :';
  1819.      PSa[3] := '__/__/__';
  1820.      PSb[3] := '999999';
  1821.      PSc[3] := '031786';
  1822.  
  1823.      Promt_str[4] := 'Please Enter DISK # :';
  1824.      PSa[4] := 'DISK NUMBER : ____';
  1825.      PSb[4] := '9999';
  1826.      PSc[4] := '0001';
  1827.  
  1828.      Promt_str[5] := 'Please Enter NAME :';
  1829.      PSa[5] := '____________';
  1830.      PSb[5] := 'XXXXXXXXXXXX';
  1831.      PSc[5] := '';
  1832.  
  1833.      Promt_str[6] := 'Please Enter COMMENTS :';
  1834.      PSa[6] := '_________________________';
  1835.      PSb[6] := 'XXXXXXXXXXXXXXXXXXXXXXXXX';
  1836.      PSc[6] := '';
  1837.  
  1838.         dialog[x] := New_Dialog( 4, 0, 0, 30, 8 ) ;
  1839.    prompt_item[x] := Add_DItem( dialog[x], G_String, None, 2, 1, 0, 0, 0, 0 ) ;
  1840.         Set_DText( dialog[x], prompt_item[x], Promt_str[x] ,
  1841.                         System_Font, TE_Left ) ;
  1842.    GET_item[x] := Add_DItem( dialog[x], G_FText, None, 2, 3, 25, 1, 0, $1180 );
  1843.         Set_DEdit( dialog[x], GET_item[x], PSa[x], PSb[x], PSc[x],
  1844.                   System_Font, TE_Center ) ;
  1845.     ok_btn[x] := Add_DItem( dialog[x], G_Button, Selectable|Exit_Btn|Default,
  1846.                         2, 5, 8, 2, 2, $1180 ) ;
  1847.         Set_DText( dialog[x], ok_btn[x], 'OK', System_Font, TE_Center ) ;
  1848.         cancel_btn[x] := Add_DItem( dialog[x], G_Button, Selectable|Exit_Btn,
  1849.                         16, 5, 8, 2, 2, $1180 ) ;
  1850.      Set_DText( dialog[x], cancel_btn[x], 'Cancel', System_Font, TE_Center ) ;
  1851.       END ;
  1852.  
  1853.  
  1854.  
  1855.   PROCEDURE Show_TYPE_box( X : INTEGER ) ;
  1856.       BEGIN
  1857.        Center_Dialog(dialog[X]);
  1858.        button[X] := Do_Dialog(dialog[X],get_item[X]);
  1859.        IF Obj_State(dialog[X],ok_btn[X]) & selected <>0 THEN
  1860.           BEGIN
  1861.           Obj_Setstate(dialog[X],ok_btn[X],none,true);
  1862.           cancel_box := false;
  1863.           END;
  1864.        IF Obj_State(dialog[X],cancel_btn[X]) & selected <>0 THEN
  1865.           BEGIN
  1866.           Obj_Setstate(dialog[X],cancel_btn[X],none,true);
  1867.           cancel_box := true;
  1868.           END;
  1869.        End_dialog(dialog[X]);
  1870.        GET_DEDIT(DIALOG[X],GET_ITEM[X],SHW_BOX_STR);
  1871.        upercase(shw_box_str);
  1872.       END;
  1873.  
  1874. Procedure item60_proc;
  1875.  
  1876.  var x : integer;
  1877.      str1 : str255;
  1878.      test,t : boolean;
  1879.  
  1880. begin
  1881.  if last_line >= 1 then
  1882.   begin
  1883.    show_type_box(1);
  1884.    if cancel_box = false then
  1885.     begin
  1886.      str1 := shw_box_str;
  1887.      x := 0;
  1888.      test := false;
  1889.      repeat
  1890.       if blname[x] = str1 then
  1891.        begin
  1892.         shw_box_str := blcomm[x];
  1893.         t := show_com_box(blname[x]);
  1894.         blcomm[x] := shw_box_str;
  1895.         test := true;
  1896.        end;
  1897.       x := x + 1;
  1898.      until x = last_line;
  1899.      if not test then
  1900.       dummy := do_alert('[1][File NOT found][ OK ]',1)
  1901.      else
  1902.       begin
  1903.        SET_CLIP(SX,SY,SW,SH);
  1904.        PRNT_SCR;
  1905.       end;
  1906.     end;
  1907.   end;
  1908. end;
  1909.  
  1910.   PROCEDURE set_add_box;
  1911.  
  1912.     BEGIN
  1913.      Add_Box := New_Dialog(25,0,0,32,17);
  1914.      txt_line := Add_DItem(Add_Box,G_text,none,2,2,28,1,0,$1180);
  1915.      Set_DText(Add_Box,txt_line,'Chose Drive!',System_Font,TE_Center);
  1916.      Btn_a := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1917.                          3,4,5,1,1,$1180);
  1918.      Set_DText(Add_box,Btn_a,'A:',System_Font,TE_Center);
  1919.      Btn_b := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1920.                          10,4,5,1,1,$1180);
  1921.      Set_DText(Add_box,Btn_b,'B:',System_Font,TE_Center);
  1922.      Btn_c := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1923.                          17,4,5,1,1,$1180);
  1924.      Set_DText(Add_box,Btn_c,'C:',System_Font,TE_Center);
  1925.      Btn_d := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1926.                          24,4,5,1,1,$1180);
  1927.      Set_DText(Add_box,Btn_d,'D:',System_Font,TE_Center);
  1928.      Btn_e := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1929.                          3,6,5,1,1,$1180);
  1930.      Set_DText(Add_box,Btn_e,'E:',System_Font,TE_Center);
  1931.      Btn_f := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1932.                          10,6,5,1,1,$1180);
  1933.      Set_DText(Add_box,Btn_f,'F:',System_Font,TE_Center);
  1934.      Btn_g := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1935.                          17,6,5,1,1,$1180);
  1936.      Set_DText(Add_box,Btn_g,'G:',System_Font,TE_Center);
  1937.      Btn_h := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1938.                          24,6,5,1,1,$1180);
  1939.      Set_DText(Add_box,Btn_h,'H:',System_Font,TE_Center);
  1940.      Btn_i := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1941.                          3,8,5,1,1,$1180);
  1942.      Set_DText(Add_box,Btn_i,'I:',System_Font,TE_Center);
  1943.      Btn_j := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1944.                          10,8,5,1,1,$1180);
  1945.      Set_DText(Add_box,Btn_j,'J:',System_Font,TE_Center);
  1946.      Btn_k := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1947.                          17,8,5,1,1,$1180);
  1948.      Set_DText(Add_box,Btn_k,'K:',System_Font,TE_Center);
  1949.      Btn_l := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1950.                          24,8,5,1,1,$1180);
  1951.      Set_DText(Add_box,Btn_l,'L:',System_Font,TE_Center);
  1952.      Btn_m := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1953.                          3,10,5,1,1,$1180);
  1954.      Set_DText(Add_box,Btn_m,'M:',System_Font,TE_Center);
  1955.      Btn_n := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1956.                          10,10,5,1,1,$1180);
  1957.      Set_DText(Add_box,Btn_n,'N:',System_Font,TE_Center);
  1958.      Btn_o := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1959.                          17,10,5,1,1,$1180);
  1960.      Set_DText(Add_box,Btn_o,'O:',System_Font,TE_Center);
  1961.      Btn_p := Add_DItem(Add_Box,G_button,Selectable|radio_btn,
  1962.                          24,10,5,1,1,$1180);
  1963.      Set_DText(Add_box,Btn_p,'P:',System_Font,TE_Center);
  1964.      p_name := Add_DItem( add_box, G_FText, None,
  1965.                              3, 12, 18, 1, 0, $1180 );
  1966.   Set_DEdit( add_box, p_name,'Path:_______________','PPPPPPPPPPPPPP', '\*.*',
  1967.                   System_Font, TE_Center ) ;
  1968.      ok := Add_DItem( Add_box, G_Button, Selectable|Exit_Btn|Default,
  1969.                         3, 14, 8, 2, 1, $1180 ) ;
  1970.      Set_DText( Add_Box, ok, 'OK', System_Font, TE_Center ) ;
  1971.      cancel := Add_DItem( Add_Box, G_Button, Selectable|Exit_Btn,
  1972.                         21, 14, 8, 2, 1, $1180 ) ;
  1973.      Set_DText( Add_Box, cancel, 'Cancel', System_Font, TE_Center ) ;
  1974.      if adrive then obj_setstate(add_box,btn_a,shadowed|selected,false)
  1975.       else obj_setstate(add_box,btn_a,disabled,false);
  1976.      if bdrive then obj_setstate(add_box,btn_b,shadowed,false)
  1977.       else obj_setstate(add_box,btn_b,disabled,false);
  1978.      if cdrive then obj_setstate(add_box,btn_c,shadowed,false)
  1979.       else obj_setstate(add_box,btn_c,disabled,false);
  1980.      if ddrive then obj_setstate(add_box,btn_d,shadowed,false)
  1981.       else obj_setstate(add_box,btn_d,disabled,false);
  1982.      if edrive then obj_setstate(add_box,btn_e,shadowed,false)
  1983.       else obj_setstate(add_box,btn_e,disabled,false);
  1984.      if fdrive then obj_setstate(add_box,btn_f,shadowed,false)
  1985.       else obj_setstate(add_box,btn_f,disabled,false);
  1986.      if gdrive then obj_setstate(add_box,btn_g,shadowed,false)
  1987.       else obj_setstate(add_box,btn_g,disabled,false);
  1988.      if hdrive then obj_setstate(add_box,btn_h,shadowed,false)
  1989.       else obj_setstate(add_box,btn_h,disabled,false);
  1990.      if idrive then obj_setstate(add_box,btn_i,shadowed,false)
  1991.       else obj_setstate(add_box,btn_i,disabled,false);
  1992.      if jdrive then obj_setstate(add_box,btn_j,shadowed,false)
  1993.       else obj_setstate(add_box,btn_j,disabled,false);
  1994.      if kdrive then obj_setstate(add_box,btn_k,shadowed,false)
  1995.       else obj_setstate(add_box,btn_k,disabled,false);
  1996.      if ldrive then obj_setstate(add_box,btn_l,shadowed,false)
  1997.       else obj_setstate(add_box,btn_l,disabled,false);
  1998.      if mdrive then obj_setstate(add_box,btn_m,shadowed,false)
  1999.       else obj_setstate(add_box,btn_m,disabled,false);
  2000.      if ndrive then obj_setstate(add_box,btn_n,shadowed,false)
  2001.       else obj_setstate(add_box,btn_n,disabled,false);
  2002.      if odrive then obj_setstate(add_box,btn_o,shadowed,false)
  2003.       else obj_setstate(add_box,btn_o,disabled,false);
  2004.      if pdrive then obj_setstate(add_box,btn_p,shadowed,false)
  2005.       else obj_setstate(add_box,btn_p,disabled,false);
  2006.      obj_setstate(add_box,ok,outlined,false);
  2007.      if adrive then
  2008.      obj_setstate(add_box,cancel,outlined,false);
  2009.     END;
  2010.  
  2011.   PROCEDURE Add_Dir;
  2012.  
  2013.     VAR Button1 : INTEGER;
  2014.         str1,str2 : string[255];
  2015.       BEGIN
  2016.        Center_Dialog(Add_Box);
  2017.        button1 := Do_Dialog(Add_Box,p_name);
  2018.        IF Obj_State(Add_Box,ok) & selected <>0 THEN
  2019.           BEGIN
  2020.           Obj_Setstate(Add_Box,ok,outlined,true);
  2021.           ADD_FLAG := TRUE;
  2022.           END;
  2023.        IF Obj_State(Add_Box,cancel) & selected <>0 THEN
  2024.           BEGIN
  2025.           Obj_Setstate(Add_Box,cancel,outlined,true);
  2026.           ADD_FLAG := FALSE;
  2027.           END;
  2028.        End_dialog(Add_Box);
  2029.        STR1 := 'A:';
  2030.        IF OBJ_STATE(ADD_BOX,BTN_A) & SELECTED <> 0 THEN STR1 := 'A:';
  2031.        IF OBJ_STATE(ADD_BOX,BTN_B) & SELECTED <> 0 THEN STR1 := 'B:';
  2032.        IF OBJ_STATE(ADD_BOX,BTN_C) & SELECTED <> 0 THEN STR1 := 'C:';
  2033.        IF OBJ_STATE(ADD_BOX,BTN_D) & SELECTED <> 0 THEN STR1 := 'D:';
  2034.        IF OBJ_STATE(ADD_BOX,BTN_E) & SELECTED <> 0 THEN STR1 := 'E:';
  2035.        IF OBJ_STATE(ADD_BOX,BTN_F) & SELECTED <> 0 THEN STR1 := 'F:';
  2036.        IF OBJ_STATE(ADD_BOX,BTN_G) & SELECTED <> 0 THEN STR1 := 'G:';
  2037.        IF OBJ_STATE(ADD_BOX,BTN_H) & SELECTED <> 0 THEN STR1 := 'H:';
  2038.        IF OBJ_STATE(ADD_BOX,BTN_I) & SELECTED <> 0 THEN STR1 := 'I:';
  2039.        IF OBJ_STATE(ADD_BOX,BTN_J) & SELECTED <> 0 THEN STR1 := 'J:';
  2040.        IF OBJ_STATE(ADD_BOX,BTN_K) & SELECTED <> 0 THEN STR1 := 'K:';
  2041.        IF OBJ_STATE(ADD_BOX,BTN_L) & SELECTED <> 0 THEN STR1 := 'L:';
  2042.        IF OBJ_STATE(ADD_BOX,BTN_M) & SELECTED <> 0 THEN STR1 := 'M:';
  2043.        IF OBJ_STATE(ADD_BOX,BTN_N) & SELECTED <> 0 THEN STR1 := 'N:';
  2044.        IF OBJ_STATE(ADD_BOX,BTN_O) & SELECTED <> 0 THEN STR1 := 'O:';
  2045.        IF OBJ_STATE(ADD_BOX,BTN_P) & SELECTED <> 0 THEN STR1 := 'P:';
  2046.        GET_DEDIT(ADD_BOX,P_NAME,STR2);
  2047.        PATH_STRING := CONCAT(STR1,STR2);
  2048.       END;
  2049.  
  2050.  PROCEDURE SET_SORT_BOX;
  2051.  
  2052.  
  2053.     BEGIN
  2054.      Sort_Box := New_Dialog(22,0,0,26,14);
  2055.      txtln := Add_DItem(Sort_Box,G_text,none,2,1,10,1,0,$1180);
  2056.      Set_DText(Sort_Box,txtln,'Chose a ',System_Font,TE_Center);
  2057.      txtln1 := Add_DItem(Sort_Box,G_text,none,2,2,10,1,0,$1180);
  2058.      Set_DText(Sort_Box,txtln1,'FIELD to',System_Font,TE_Center);
  2059.      txtln2 := Add_DItem(Sort_Box,G_text,none,2,3,10,1,0,$1180);
  2060.      Set_DText(Sort_Box,txtln2,'Sort on.',System_Font,TE_Center);
  2061.      Btn_na := Add_DItem(Sort_Box,G_button,Selectable|radio_btn,
  2062.                          14,1,10,1,1,$1180);
  2063.      Set_DText(Sort_box,Btn_na,'NAME',System_Font,TE_Center);
  2064.      Btn_ty := Add_DItem(Sort_Box,G_button,Selectable|radio_btn,
  2065.                          14,3,10,1,1,$1180);
  2066.      Set_DText(Sort_box,Btn_ty,'TYPE',System_Font,TE_Center);
  2067.      Btn_da := Add_DItem(Sort_Box,G_button,Selectable|radio_btn,
  2068.                          14,5,10,1,1,$1180);
  2069.      Set_DText(Sort_box,Btn_da,'DATE',System_Font,TE_Center);
  2070.      Btn_di := Add_DItem(Sort_Box,G_button,Selectable|radio_btn,
  2071.                          14,7,10,1,1,$1180);
  2072.      Set_DText(Sort_box,Btn_di,'DISK #',System_Font,TE_Center);
  2073.      Btn_fo := Add_DItem(Sort_Box,G_button,Selectable|radio_btn,
  2074.                          14,9,10,1,1,$1180);
  2075.      Set_DText(Sort_box,Btn_fo,'FOLDER',System_Font,TE_Center);
  2076.      Btn_co := Add_DItem(Sort_Box,G_button,Selectable|radio_btn,
  2077.                          14,11,10,1,1,$1180);
  2078.      Set_DText(Sort_box,Btn_co,'COMMENTS',System_Font,TE_Center);
  2079.      ok1 := Add_DItem( Sort_box, G_Button, Selectable|Exit_Btn|Default,
  2080.                         2,6, 8, 2, 1, $1180 ) ;
  2081.      Set_DText( Sort_Box, ok1, 'OK', System_Font, TE_Center ) ;
  2082.      cancel1 := Add_DItem( Sort_Box, G_Button, Selectable|Exit_Btn,
  2083.                         2,10, 8, 2, 1, $1180 ) ;
  2084.      Set_DText( Sort_Box, cancel1, 'Cancel', System_Font, TE_Center ) ;
  2085.      obj_setstate(Sort_box,btn_na,shadowed|selected,false);
  2086.      obj_setstate(Sort_box,btn_ty,shadowed,false);
  2087.      obj_setstate(Sort_box,btn_da,shadowed,false);
  2088.      obj_setstate(Sort_box,btn_di,shadowed,false);
  2089.      obj_setstate(Sort_box,btn_fo,shadowed,false);
  2090.      obj_setstate(Sort_box,btn_co,shadowed,false);
  2091.     END;
  2092.  
  2093.  
  2094.   PROCEDURE Sort_type;
  2095.  
  2096.     VAR Button1,DUMMY : INTEGER;
  2097.  
  2098.       BEGIN
  2099.        dummy := 0;
  2100.        Center_Dialog(Sort_Box);
  2101.        button1 := Do_Dialog(Sort_Box,DUMMY);
  2102.        IF Obj_State(Sort_Box,ok1) & selected <>0 THEN
  2103.           BEGIN
  2104.           Obj_Setstate(Sort_Box,ok1,none,true);
  2105.           cancel_box := false;
  2106.           END;
  2107.        IF Obj_State(Sort_Box,cancel1) & selected <>0 THEN
  2108.           BEGIN
  2109.           Obj_Setstate(Sort_Box,cancel1,none,true);
  2110.           cancel_box := true;
  2111.           END;
  2112.        End_dialog(Sort_Box);
  2113.        if cancel_box = false then
  2114.        begin
  2115.        SET_WINFO(HANDLE,WSTITLE);
  2116.        IF OBJ_STATE(SORT_BOX,BTN_NA) & SELECTED <> 0 THEN
  2117.        QSORT(0,LAST_LINE -1,2);
  2118.        IF OBJ_STATE(SORT_BOX,BTN_DA) & SELECTED <> 0 THEN
  2119.        QSORT(0,LAST_LINE -1,3);
  2120.        IF OBJ_STATE(SORT_BOX,BTN_DI) & SELECTED <> 0 THEN
  2121.        QSORT(0,LAST_LINE -1,1);
  2122.        IF OBJ_STATE(SORT_BOX,BTN_FO) & SELECTED <> 0 THEN
  2123.        QSORT(0,LAST_LINE -1,4);
  2124.        IF OBJ_STATE(SORT_BOX,BTN_CO) & SELECTED <> 0 THEN
  2125.        QSORT(0,LAST_LINE -1,5);
  2126.        IF OBJ_STATE(SORT_BOX,BTN_TY) & SELECTED <> 0 THEN
  2127.        QSORT(0,LAST_LINE -1,6);
  2128.        IF TITLE_BAR = FALSE THEN SET_TITLE_BAR(1);
  2129.        IF TITLE_BAR = TRUE THEN SET_TITLE_BAR(2);
  2130.        end;
  2131.       END;
  2132.  
  2133.   FUNCTION CHOOSE_BOX : INTEGER;
  2134.  
  2135.     VAR Button1,DUMMY : INTEGER;
  2136.  
  2137.       BEGIN
  2138.        dummy := 0;
  2139.        Center_Dialog(Sort_Box);
  2140.        button1 := Do_Dialog(Sort_Box,DUMMY);
  2141.        IF Obj_State(Sort_Box,ok1) & selected <>0 THEN
  2142.           BEGIN
  2143.           Obj_Setstate(Sort_Box,ok1,none,true);
  2144.           cancel_box := false;
  2145.           END;
  2146.        IF Obj_State(Sort_Box,cancel1) & selected <>0 THEN
  2147.           BEGIN
  2148.           Obj_Setstate(Sort_Box,cancel1,none,true);
  2149.           cancel_box := true;
  2150.           END;
  2151.        End_dialog(Sort_Box);
  2152.        if cancel_box = false then
  2153.        begin
  2154.        IF OBJ_STATE(SORT_BOX,BTN_NA) & SELECTED <> 0 THEN
  2155.        CHOOSE_BOX := 1;
  2156.        IF OBJ_STATE(SORT_BOX,BTN_DA) & SELECTED <> 0 THEN
  2157.        CHOOSE_BOX := 3;
  2158.        IF OBJ_STATE(SORT_BOX,BTN_DI) & SELECTED <> 0 THEN
  2159.        CHOOSE_BOX := 4;
  2160.        IF OBJ_STATE(SORT_BOX,BTN_FO) & SELECTED <> 0 THEN
  2161.        CHOOSE_BOX := 5;
  2162.        IF OBJ_STATE(SORT_BOX,BTN_CO) & SELECTED <> 0 THEN
  2163.        CHOOSE_BOX := 6;
  2164.        IF OBJ_STATE(SORT_BOX,BTN_TY) & SELECTED <> 0 THEN
  2165.        CHOOSE_BOX := 2;
  2166.        end;
  2167.       END;
  2168.  
  2169.  
  2170.   PROCEDURE SCR_BLACK;
  2171.  
  2172.         BEGIN
  2173.         TEXT_COLOR(0);
  2174.         line_COLOR(0);
  2175.         paint_COLOR(2);
  2176.         SET_CLIP(SX,SY,SW,SH);
  2177.         HIDE_MOUSE;
  2178.         PRNT_SCR;
  2179.         SHOW_MOUSE;
  2180.         COLOR_FLAG := FALSE;
  2181.         END;
  2182.  
  2183.   PROCEDURE SCR_WHITE;
  2184.  
  2185.         BEGIN
  2186.         TEXT_COLOR(1);
  2187.         line_COLOR(1);
  2188.         paint_COLOR(0);
  2189.         SET_CLIP(SX,SY,SW,SH);
  2190.         HIDE_MOUSE;
  2191.         PRNT_SCR;
  2192.         SHOW_MOUSE;
  2193.         COLOR_FLAG := TRUE;
  2194.         END;
  2195.  
  2196.  
  2197.   PROCEDURE ARROW_RTN(HANDLE,X : INTEGER);
  2198.     VAR CW,CH,BW,BH : INTEGER;
  2199.         MAX : REAL;
  2200.     BEGIN
  2201.      SYS_FONT_SIZE(CW,CH,BW,BH);
  2202.      WORK_RECT(HANDLE,SX,SY,SW,SH);
  2203.      MAX := SH DIV BH;
  2204.  
  2205.      CASE X OF
  2206.       0: BEGIN
  2207.           CUR_LOC := CUR_LOC - TRUNC(MAX);
  2208.           IF CUR_LOC < 0 THEN CUR_LOC := 0;
  2209.           SET_CLIP(SX,SY,SW,SH);
  2210.           PRNT_SCR;
  2211.           VSPOS( CUR_LOC );
  2212.           END;
  2213.       1: BEGIN
  2214.           CUR_LOC := CUR_LOC + TRUNC(MAX);
  2215.         IF CUR_LOC > (TOTAL_LINES -14) THEN CUR_LOC := TRUNC(TOTAL_LINES -14 );
  2216.           SET_CLIP(SX,SY,SW,SH);
  2217.           PRNT_SCR;
  2218.           VSPOS( CUR_LOC );
  2219.          END;
  2220.       2: BEGIN
  2221.           CUR_LOC := CUR_LOC - 1;
  2222.           IF CUR_LOC < 0 THEN CUR_LOC := 0;
  2223.           SET_CLIP(SX,SY,SW,SH);
  2224.           PRNT_SCR;
  2225.           VSPOS( CUR_LOC );
  2226.           END;
  2227.       3: BEGIN
  2228.           CUR_LOC := CUR_LOC + 1;
  2229.         IF CUR_LOC > (TOTAL_LINES -14) THEN CUR_LOC := TRUNC(TOTAL_LINES -14 );
  2230.           SET_CLIP(SX,SY,SW,SH);
  2231.           VSPOS( CUR_LOC );
  2232.           PRNT_SCR;
  2233.          END;
  2234.        4:  ;
  2235.        5:  ;
  2236.        6:  ;
  2237.        7:  ;
  2238.      END;
  2239.     END;
  2240.  
  2241.   PROCEDURE VSLIDER ( HANDLE,MOVED : INTEGER );
  2242.    VAR A : INTEGER;
  2243.        MVD,ADJ : REAL;
  2244.     BEGIN
  2245.       ADJ := 1000 / TOTAL_LINES;
  2246.       MVD := MOVED;
  2247.       CUR_LOC := ROUND(MVD / ADJ);
  2248.       IF CUR_LOC >= 14 THEN CUR_LOC := CUR_LOC - 14;
  2249.       SET_CLIP(SX,SY,SW,SH);
  2250.       PRNT_SCR;
  2251.       VSPOS( CUR_LOC );
  2252.     END;
  2253.  
  2254.   PROCEDURE PRINT_B;
  2255.  
  2256.     VAR X,DUMMY : INTEGER;
  2257.         BLOCK,ALERT1 : STR255;
  2258.  
  2259.     BEGIN
  2260.     alert1 := '[3][Make sure your printer is connected.][ OK | CANCEL ]';
  2261.     dummy := Do_alert( alert1, 1);
  2262.     IF DUMMY = 1 THEN
  2263.      BEGIN
  2264.       IF BUFFER_FLAG THEN
  2265.        BEGIN
  2266.        REWRITE(OUTPUT_FILE,'PRN:');
  2267.        BLOCK :='D# |F |FILENAME     |DATE     |FOLDER         |COMMENTS.... ';
  2268.        WRITELN(OUTPUT_FILE,BLOCK);
  2269.        FOR X := 0 TO (PRNT_COUNT -1) DO
  2270.         BEGIN
  2271. BLOCK := '                                                                   ';
  2272.         INSERT(BLDN[PINDX[X]],BLOCK,1);
  2273.         INSERT(BLAT[PINDX[X]],BLOCK,5);
  2274.         INSERT(BLNAME[PINDX[X]],BLOCK,8);
  2275.         INSERT(BLDATE[PINDX[X]],BLOCK,22);
  2276.         INSERT(BLFOLD[PINDX[X]],BLOCK,32);
  2277.         INSERT(BLCOMM[PINDX[X]],BLOCK,48);
  2278.         BLOCK[0] := CHR(80);
  2279.         WRITELN(OUTPUT_FILE,BLOCK);
  2280.         END;
  2281.        END
  2282.         ELSE
  2283.          DUMMY := DO_ALERT('[1][BUFFER EMPTY][ CANCEL ]',1);
  2284.      END;
  2285.    END;
  2286.  
  2287.   PROCEDURE PRINT_D;
  2288.  
  2289.     VAR X,Y : INTEGER;
  2290.         BLOCK,ALERT1,FN : STR255;
  2291.  
  2292.     BEGIN
  2293.     IF GET_IN_FILE(PATH_NM1,FULL_NAME) THEN
  2294.      BEGIN
  2295.      REWRITE(OUT_FILE,FULL_NAME);
  2296.      BLOCK :='D# |F |FILENAME     |DATE     |FOLDER         |COMMENTS.... ';
  2297.      WRITELN(OUT_FILE,BLOCK);
  2298.      FOR X := 0 TO TRUNC(TOTAL_LINES) DO
  2299.       BEGIN
  2300. BLOCK := '                                                                   ';
  2301.        INSERT(BLDN[SINDX[X]],BLOCK,1);
  2302.        INSERT(BLAT[SINDX[X]],BLOCK,5);
  2303.        INSERT(BLNAME[SINDX[X]],BLOCK,8);
  2304.        INSERT(BLDATE[SINDX[X]],BLOCK,22);
  2305.        INSERT(BLFOLD[SINDX[X]],BLOCK,32);
  2306.        INSERT(BLCOMM[SINDX[X]],BLOCK,48);
  2307.        BLOCK[0] := CHR(75);
  2308.        WRITELN(OUT_FILE,BLOCK);
  2309.       END;
  2310.      CLOSE(OUT_FILE);
  2311.      END;
  2312.    END;
  2313.   PROCEDURE PRINT_D1;
  2314.  
  2315.     VAR X,Y : INTEGER;
  2316.         BLOCK,ALERT1,FN : STR255;
  2317.  
  2318.     BEGIN
  2319.     IF BUFFER_FLAG THEN
  2320.     BEGIN
  2321.      IF GET_IN_FILE(PATH_NM1,FULL_NAME) THEN
  2322.       BEGIN
  2323.       REWRITE(OUT_FILE,FULL_NAME);
  2324.       BLOCK :='D# |F |FILENAME     |DATE     |FOLDER         |COMMENTS.... ';
  2325.       WRITELN(OUT_FILE,BLOCK);
  2326.       FOR X := 0 TO (PRNT_COUNT -1) DO
  2327.        BEGIN
  2328. BLOCK := '                                                                   ';
  2329.         INSERT(BLDN[PINDX[X]],BLOCK,1);
  2330.         INSERT(BLAT[PINDX[X]],BLOCK,5);
  2331.         INSERT(BLNAME[PINDX[X]],BLOCK,8);
  2332.         INSERT(BLDATE[PINDX[X]],BLOCK,22);
  2333.         INSERT(BLFOLD[PINDX[X]],BLOCK,32);
  2334.         INSERT(BLCOMM[PINDX[X]],BLOCK,48);
  2335.         BLOCK[0] := CHR(75);
  2336.         WRITELN(OUT_FILE,BLOCK);
  2337.        END;
  2338.      CLOSE(OUT_FILE);
  2339.      END;
  2340.     END
  2341.      ELSE
  2342.       X := DO_ALERT('[3][BUFFER EMPTY][ CANCEL ]',1);
  2343.    END;
  2344.  
  2345.   PROCEDURE PRINT_P;
  2346.  
  2347.     VAR X,DUMMY : INTEGER;
  2348.         BLOCK,ALERT1 : STR255;
  2349.  
  2350.     BEGIN
  2351.     alert1 := '[3][Make sure your printer is connected.][ OK | CANCEL ]';
  2352.     dummy := Do_alert( alert1, 1);
  2353.     IF DUMMY = 1 THEN
  2354.      BEGIN
  2355.      REWRITE(OUTPUT_FILE,'PRN:');
  2356.      BLOCK :='D# |F |FILENAME     |DATE     |FOLDER         |COMMENTS.... ';
  2357.      WRITELN(OUTPUT_FILE,BLOCK);
  2358.      FOR X := 0 TO TRUNC(TOTAL_LINES) DO
  2359.       BEGIN
  2360. BLOCK := '                                                                   ';
  2361.       INSERT(BLDN[SINDX[X]],BLOCK,1);
  2362.       INSERT(BLAT[SINDX[X]],BLOCK,5);
  2363.       INSERT(BLNAME[SINDX[X]],BLOCK,8);
  2364.       INSERT(BLDATE[SINDX[X]],BLOCK,22);
  2365.       INSERT(BLFOLD[SINDX[X]],BLOCK,32);
  2366.       INSERT(BLCOMM[SINDX[X]],BLOCK,48);
  2367.       BLOCK[0] := CHR(80);
  2368.       WRITELN(OUTPUT_FILE,BLOCK);
  2369.       END;
  2370.     END;
  2371.    END;
  2372.  
  2373. PROCEDURE PRINT_S;
  2374.  
  2375.   VAR A,Y,Z,V,ANS : INTEGER;
  2376.        FLAG,T : BOOLEAN;
  2377.        STR,STR1 : STR255;
  2378.  
  2379.   BEGIN
  2380.    V := PRNT_COUNT;
  2381.    A := CHOOSE_BOX;
  2382.    IF A = 6 THEN T := SHOW_COM_BOX('--------------')
  2383.      ELSE SHOW_TYPE_BOX(A);
  2384.    IF CANCEL_BOX = FALSE THEN
  2385.     BEGIN
  2386.      Y := CUR_LOC;
  2387.      REPEAT
  2388.       FLAG := FALSE;
  2389.       Z := CUR_LOC;
  2390.       SEARCH(A);
  2391.       IF SEARCH_FLAG = TRUE THEN
  2392.        BEGIN
  2393.         STR1 :='FOUND...... ';
  2394.         CASE A OF
  2395.     1: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]]);
  2396.     2: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]]);
  2397.     3: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]],'  ',BLDATE[SINDX[CUR_LOC]]);
  2398.     4: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]],'  ',BLDN[SINDX[CUR_LOC]]);
  2399.     5: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]],'  ',BLFOLD[SINDX[CUR_LOC]]);
  2400.     6: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]],'  ',BLCOMM[SINDX[CUR_LOC]]);
  2401.         END;
  2402.        SET_WINFO(HANDLE,STR);
  2403.        ANS := DO_ALERT('[1][ADD TO PRINT BUFFER ?][ YES | NO ]',1);
  2404.        IF ANS = 1 THEN
  2405.        BEGIN
  2406.         PINDX[PRNT_COUNT] := SINDX[CUR_LOC];
  2407.         PRNT_COUNT := PRNT_COUNT +1;
  2408.         BUFFER_FLAG := TRUE;
  2409.        END;
  2410.        FLAG := TRUE;
  2411.        END;
  2412.      UNTIL FLAG = FALSE;
  2413.      CUR_LOC := Y;
  2414.     END;
  2415.    IF PRNT_COUNT = V THEN
  2416.      A := DO_ALERT('[3][NO FILES FOUND][ CANCEL ]',1);
  2417.    END;
  2418.  
  2419. PROCEDURE PRINT( X : INTEGER );
  2420.     VAR A : INTEGER;
  2421.  
  2422.   BEGIN
  2423.    A := DO_ALERT('[2][WHERE WOULD YOU LIKE TO PRINT][ PRINTER | DISK ]',1);
  2424.    CASE X OF
  2425.    1:  BEGIN
  2426.         IF A = 1 THEN PRINT_P
  2427.          ELSE PRINT_D;
  2428.        END;
  2429.    2:  BEGIN
  2430.         IF A = 1 THEN PRINT_B
  2431.          ELSE PRINT_D1;
  2432.        END;
  2433.    END;
  2434.   END;
  2435.  
  2436. PROCEDURE PRINT_CLEAR;
  2437.  
  2438.   VAR X : INTEGER;
  2439.  
  2440.   BEGIN
  2441.    X := DO_ALERT
  2442. ('[2][ARE YOU SURE YOU WANT|THE PRINT BUFFER CLEARED][ YES | NO WAY ]',2);
  2443.    IF X = 1 THEN
  2444.    BEGIN
  2445.     PRNT_COUNT := 0;
  2446.     BUFFER_FLAG := FALSE;
  2447.     FOR X := 0 TO 1100 DO
  2448.      PINDX[X] := X;
  2449.     X := DO_ALERT('[1][THE PRINT BUFFER HAS BEEN ERASED][ OK ]',1);
  2450.    END;
  2451.   END;
  2452.  
  2453. PROCEDURE PRINT_QUERY;
  2454.  
  2455.    VAR ANSWER : INTEGER;
  2456.  
  2457.      BEGIN
  2458.       ANSWER := DO_ALERT(
  2459.      '[2][WOULD YOU LIKE TO ADD|THIS FILE TO THE|PRINT BUFFER][ YES | NO ]',1);
  2460.       IF ANSWER = 1 THEN
  2461.        BEGIN
  2462.        PINDX[PRNT_COUNT] := SINDX[CUR_LOC];
  2463.        PRNT_COUNT := PRNT_COUNT + 1;
  2464.        BUFFER_FLAG := TRUE;
  2465.        END;
  2466.      END;
  2467.  
  2468.   PROCEDURE P_SCRN;
  2469.  
  2470.     BEGIN
  2471.      SET_CLIP(SX,SY,SW,SH);
  2472.      PRNT_SCR;
  2473.      VSPOS( CUR_LOC );
  2474.     END;
  2475.  
  2476.   PROCEDURE SRCH_T(X : INTEGER);
  2477.  
  2478.     VAR TEMP : INTEGER;
  2479.         STR,STR1 : STR255;
  2480.         T : BOOLEAN;
  2481.  
  2482.     begin
  2483.      SHW_BOX_STR := '';
  2484.      IF X = 6 THEN T := SHOW_COM_BOX('--------------')
  2485.        ELSE SHOW_TYPE_BOX(X);
  2486.      IF CANCEL_BOX = FALSE THEN
  2487.      BEGIN
  2488.       TEMP := CUR_LOC;
  2489.       SEARCH(X);
  2490.       IF TEMP <> CUR_LOC THEN
  2491.        BEGIN
  2492.         STR1 :='FOUND...... ';
  2493.         CASE X OF
  2494.     1: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]]);
  2495.     2: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]]);
  2496.     3: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]],'  ',BLDATE[SINDX[CUR_LOC]]);
  2497.     4: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]],'  ',BLDN[SINDX[CUR_LOC]]);
  2498.     5: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]],'  ',BLFOLD[SINDX[CUR_LOC]]);
  2499.     6: STR := CONCAT(STR1,BLNAME[SINDX[CUR_LOC]],'  ',BLCOMM[SINDX[CUR_LOC]]);
  2500.         END;
  2501.         SET_WINFO(HANDLE,STR);
  2502.         PRINT_QUERY;
  2503.         P_SCRN;
  2504.        END;
  2505.      END;
  2506.     end;
  2507.  
  2508.   PROCEDURE MAN_DELETE;
  2509.  
  2510.      VAR X,Y : INTEGER;
  2511.  
  2512.      BEGIN
  2513.       Y := CUR_LOC;
  2514.       SHOW_TYPE_BOX(1);
  2515.       IF CANCEL_BOX = FALSE THEN
  2516.        BEGIN
  2517.         SEARCH(1);
  2518.         X := CUR_LOC;
  2519.         DEL_FILE(SINDX[X]);
  2520.         CUR_LOC := Y;
  2521.         LAST_LINE := LINE_COUNT;
  2522.         P_SCRN;
  2523.        END;
  2524.      END;
  2525.  
  2526. FUNCTION CHECK_FOLDER( X : INTEGER) : BOOLEAN;
  2527.  
  2528.    VAR STR : STR255;
  2529.  
  2530.    BEGIN
  2531.     CHECK_FOLDER := FALSE;
  2532.     STR := BLFOLD[SINDX[X]];
  2533.     IF STR <> '--------------' THEN
  2534.      BEGIN
  2535.       FOLDER := STR;
  2536.       CHECK_FOLDER := TRUE;
  2537.      END;
  2538.    END;
  2539.  
  2540. FUNCTION SRCH( FOLDER : STR255; VAR X : INTEGER ) : BOOLEAN;
  2541.  
  2542.   VAR Y : INTEGER;
  2543.  
  2544.   BEGIN
  2545.    Y := 0;
  2546.    SRCH := FALSE;
  2547.    REPEAT
  2548.      IF FOLDER = BLNAME[SINDX[Y]] THEN
  2549.       BEGIN
  2550.        IF BLDN[SINDX[X]] = BLDN[SINDX[Y]] THEN
  2551.         BEGIN
  2552.          FOLDER := BLNAME[SINDX[Y]];
  2553.          X := Y;
  2554.          SRCH := TRUE;
  2555.          Y := LAST_LINE -1;
  2556.         END;
  2557.       END;
  2558.     Y := Y +1;
  2559.     UNTIL Y = LAST_LINE;
  2560.    END;
  2561.  
  2562. PROCEDURE SRCH_PATH;
  2563.  
  2564.     VAR X,TEMP : INTEGER;
  2565.         Q,FLD,FLAG : BOOLEAN;
  2566.         STR,STR1 : STR255;
  2567.  
  2568.     BEGIN
  2569.      SHOW_TYPE_BOX(1);
  2570.      TEMP := CUR_LOC;
  2571.      STR := '                     ********** FILE NOT FOUND **********';
  2572.      SEARCH(1);
  2573.      IF SEARCH_FLAG THEN
  2574.       BEGIN
  2575.        X := CUR_LOC;
  2576.        STR := BLNAME[SINDX[X]];
  2577.        STR1 := BLDN[SINDX[X]];
  2578.        REPEAT
  2579.         FLAG := FALSE;
  2580.         FLD := CHECK_FOLDER(X);
  2581.         IF FLD THEN
  2582.          BEGIN
  2583.           INSERT('\',STR,1);
  2584.           INSERT(FOLDER,STR,1);
  2585.           Q := SRCH(FOLDER,X);
  2586.           IF Q THEN
  2587.            BEGIN
  2588.             FLAG := TRUE;
  2589.            END;
  2590.          END;
  2591.        UNTIL FLAG = FALSE;
  2592.       END;
  2593.      CUR_LOC := TEMP;
  2594.      P_SCRN;
  2595.      IF SEARCH_FLAG = TRUE THEN
  2596.      BEGIN
  2597.       INSERT('  ',STR,1);
  2598.       INSERT(STR1,STR,1);
  2599.       INSERT('PATH = DISK #  ',STR,1);
  2600.      END;
  2601.      SET_WINFO(HANDLE,STR);
  2602.      X := DO_ALERT('[3][PATH IS ON TITLE BAR][ OK ]',1);
  2603.     END;
  2604.  
  2605.   PROCEDURE ADD_FILES;
  2606.  
  2607.      BEGIN
  2608.       SHOW_TYPE_BOX(4);
  2609.       IF CANCEL_BOX = FALSE THEN
  2610.        BEGIN
  2611.         DNSTR := SHW_BOX_STR;
  2612.         ADD_DIR;
  2613.         IF ADD_FLAG THEN
  2614.          begin
  2615.          G_DIR;
  2616.          IF ADD_FLAG = TRUE THEN
  2617.          BEGIN
  2618.           VSSIZE( TOTAL_LINES );
  2619.           P_SCRN;
  2620.           ADDCOM;
  2621.           IF TITLE_BAR = TRUE THEN SET_TITLE_BAR(2);
  2622.          END;
  2623.         end;
  2624.        END;
  2625.      END;
  2626.  
  2627. PROCEDURE FIX_SPACE;
  2628.  
  2629.   VAR X,Y  : INTEGER;
  2630.       STR  : STRING;
  2631.  
  2632.   BEGIN
  2633.    STR := ' ';
  2634.    FOR X := 0 TO LAST_LINE DO
  2635.     BEGIN
  2636.     Y := POS(STR,BLNAME[SINDX[X]]);
  2637.     IF Y <> 0 THEN BLNAME[X,0] := CHR(Y -1);
  2638.     Y := POS(STR,BLFOLD[SINDX[X]]);
  2639.     IF Y <> 0 THEN BLFOLD[X,0] := CHR(Y -1);
  2640.     END;
  2641.    END;
  2642.  
  2643. PROCEDURE LOAD_DB;
  2644.  
  2645.    VAR HANDLE,X,Y,Z,Q,BAR_FLAG,COL_FLAG : INTEGER;
  2646.        NBYTES,ERR : LONG_INTEGER;
  2647.        BUF : BUF_TYPE;
  2648.        FN : STR255;
  2649.  
  2650.    BEGIN
  2651.     IF GET_IN_FILE(PATH_NM,FULL_NAME) THEN
  2652.      BEGIN
  2653.       FN := FULL_NAME;
  2654.       X := 0;
  2655.       Y := 1;
  2656.       WHILE X <= LENGTH(FN) DO
  2657.        BEGIN
  2658.        FULL_NAME[X] := FN[Y];
  2659.        X := X +1;
  2660.        Y := Y +1;
  2661.        END;
  2662.       FULL_NAME[X] := CHR(0);
  2663.       HANDLE := GEM_OPEN(FULL_NAME,0);
  2664.       IF HANDLE >= 0 THEN
  2665.       BEGIN
  2666.        NBYTES := 3;
  2667.        ERR := GEM_READ(HANDLE,NBYTES,BUF);
  2668.        IF (BUF[0] = 'D') AND (BUF[1] = 'I') AND (BUF[2] = 'R') THEN
  2669.         BEGIN
  2670.          NBYTES := 2;
  2671.          ERR := GEM_READI(HANDLE,NBYTES,LAST_LINE);
  2672.          ERR := GEM_READI(HANDLE,NBYTES,LAST_DISK);
  2673.          ERR := GEM_READI(HANDLE,NBYTES,BAR_FLAG);
  2674.          ERR := GEM_READI(HANDLE,NBYTES,COL_FLAG);
  2675.          IF ERR >= 0 THEN
  2676.           BEGIN
  2677.           FOR X := 0 TO LAST_LINE DO
  2678.            BEGIN
  2679.            NBYTES := 80;
  2680.            ERR := GEM_READ(HANDLE,NBYTES,BUF);
  2681.            Z := 0;
  2682.            FOR Y := 1 TO 4 DO
  2683.             BEGIN
  2684.              BLDN[X,Y] := BUF[Z];
  2685.              Z := Z +1;
  2686.             END;
  2687.             BLDN[X,0] := CHR(4);
  2688.            Z := 5;
  2689.            FOR Y := 1 TO 2 DO
  2690.             BEGIN
  2691.              BLAT[X,Y] := BUF[Z];
  2692.              Z := Z +1;
  2693.             END;
  2694.             BLAT[X,0] := CHR(2);
  2695.            Z := 8;
  2696.            FOR Y := 1 TO 14 DO
  2697.             BEGIN
  2698.              BLNAME[X,Y] := BUF[Z];
  2699.              Z := Z +1;
  2700.             END;
  2701.             BLNAME[X,0] := CHR(14);
  2702.            Z := 23;
  2703.            FOR Y := 1 TO 10 DO
  2704.             BEGIN
  2705.              BLDATE[X,Y] := BUF[Z];
  2706.              Z := Z +1;
  2707.             END;
  2708.             BLDATE[X,0] := CHR(10);
  2709.            Z := 34;
  2710.            FOR Y := 1 TO 14 DO
  2711.             BEGIN
  2712.              BLFOLD[X,Y] := BUF[Z];
  2713.              Z := Z +1;
  2714.             END;
  2715.             BLFOLD[X,0] := CHR(14);
  2716.            Z := 49;
  2717.            FOR Y := 1 TO 26 DO
  2718.             BEGIN
  2719.              BLCOMM[X,Y] := BUF[Z];
  2720.              Z := Z +1;
  2721.             END;
  2722.            BLCOMM[X,0] := CHR(26);
  2723.            END;
  2724.          END;
  2725.         GEM_CLOSE(HANDLE);
  2726.         TOTAL_LINES := LAST_LINE;
  2727.         CUR_LOC := 0;
  2728.         FOR X := 0 TO 1100 DO
  2729.         SINDX[X] := X;
  2730.         FIX_SPACE;
  2731.         VSSIZE( TOTAL_LINES );
  2732.         VSPOS(CUR_LOC);
  2733.         IF COL_FLAG = 1 THEN SCR_WHITE
  2734.          ELSE SCR_BLACK;
  2735.         SET_TITLE_BAR(BAR_FLAG);
  2736.        END
  2737.         ELSE
  2738.          BEGIN
  2739.           GEM_CLOSE(HANDLE);
  2740.           DUMMY := DO_ALERT('[1][THIS IS NOT A DIRECTORY FILE][ CANCEL ]',1);
  2741.          END;
  2742.       END
  2743.         ELSE
  2744.          Z := DO_ALERT('[2][DISK ERROR CHECK DISK AND TRY AGAIN][ CANCEL ]',1);
  2745.      END;
  2746.    END;
  2747.  
  2748.  
  2749.   PROCEDURE Do_Menu( title, item : integer ) ;
  2750.  
  2751.     VAR
  2752.       alert11,ALERT23 : Str255 ;
  2753.       ANUM,N : INTEGER;
  2754.  
  2755.     BEGIN
  2756.       ALERT11 :=
  2757.  '[0][PROGRAM WRITEN BY| MIKE HOLLENBECK|    IN O.S.S| PERSONAL PASCAL][ OK ]';
  2758.       ALERT23 := '[2][ARE YOU SURE YOU WANT TO QUIT ?][ NO | YES ]';
  2759.       PATH_NM := 'A:\*.DIR';
  2760.       PATH_NM1 := 'A:\*.DOC';
  2761.  
  2762.  
  2763.        IF TITLE = DESK_TITLE THEN infobox;
  2764.        IF TITLE = FILE_TITLE THEN
  2765.             BEGIN
  2766.              IF ITEM = OPEN_ITEM THEN load_db;
  2767.              IF ITEM = CLOSE_ITEM THEN SAVE_DB;
  2768.              IF ITEM = ADD_ITEM THEN ADD_FILES;
  2769.              IF ITEM = DEL_ITEM THEN MAN_DELETE;
  2770.              IF ITEM = COM_ITEM THEN COM_CHECK;
  2771.              IF ITEM = ITEM60 THEN ITEM60_PROC;
  2772.              IF ITEM = QT_ITEM THEN FLAG1 := DO_ALERT(ALERT23,1);
  2773.             END;
  2774.  
  2775.        IF TITLE = SEARCH_TITLE THEN
  2776.             BEGIN
  2777.              IF ITEM = SNAME_ITEM THEN SRCH_T(1);
  2778.              IF ITEM = STYPE_ITEM THEN SRCH_T(2);
  2779.              IF ITEM = SDATE_ITEM THEN SRCH_T(3);
  2780.              IF ITEM = SDNUM_ITEM THEN SRCH_T(4);
  2781.              IF ITEM = Sfnd_ITEM THEN  SRCH_PATH;
  2782.              IF ITEM = SFOLD_ITEM THEN  SRCH_T(5);
  2783.              IF ITEM = COMB_ITEM THEN  SRCH_T(6);
  2784.              IF ITEM = PRINTA_ITEM THEN PRINT_S;
  2785.              IF ITEM = sort_item THEN
  2786.               BEGIN
  2787.                sort_type ;
  2788.                SET_CLIP(SX,SY,SW,SH);
  2789.                PRNT_SCR;
  2790.               END;
  2791.             END;
  2792.         IF TITLE = PRINT_TITLE THEN
  2793.             BEGIN
  2794.               IF ITEM = PRINTD_ITEM THEN PRINT(1);
  2795.               IF ITEM = PRINTP_ITEM THEN PRINT(2);
  2796.               IF ITEM = PRINTC_ITEM THEN PRINT_CLEAR;
  2797.             END;
  2798.          IF TITLE = STYLE_TITLE THEN
  2799.             BEGIN
  2800.               IF ITEM = WHITE_ITEM THEN SCR_WHITE;
  2801.               IF ITEM = BLACK_ITEM THEN SCR_BLACK;
  2802.               IF ITEM = stat_ITEM THEN set_title_bar(2);
  2803.               IF ITEM = layout_ITEM THEN set_title_bar(1);
  2804.             END;
  2805.          IF TITLE = HELP_TITLE THEN
  2806.             BEGIN
  2807.              if item = item41 then item41_proc;
  2808.              if item = item42 then item42_proc;
  2809.              if item = item43 then item43_proc;
  2810.              if item = item44 then item44_proc;
  2811.              if item = item45 then item45_proc;
  2812.              if item = item46 then item46_proc;
  2813.              if item = item47 then item47_proc;
  2814.              if item = item48 then item48_proc;
  2815.              if item = item49 then item49_proc;
  2816.              if item = item50 then item50_proc;
  2817.              if item = item51 then item51_proc;
  2818.              if item = item52 then item52_proc;
  2819.              if item = item53 then item53_proc;
  2820.              if item = item54 then item54_proc;
  2821.              if item = item55 then item55_proc;
  2822.              if item = item56 then item56_proc;
  2823.              if item = item57 then item57_proc;
  2824.              if item = item58 then item58_proc;
  2825.             END;
  2826.  
  2827.       Menu_Normal( menu, title ) ;
  2828.     END ;
  2829.  
  2830.   Procedure get_line(mx,my : integer);
  2831.  
  2832.    var  adj,start,x,l_num : integer;
  2833.         str1,str2,str3,STR4 : str255;
  2834.         T : BOOLEAN;
  2835.  
  2836.    begin
  2837.     if last_line > 0 then
  2838.      begin
  2839.       adj := sy + 2;
  2840.       start := my - adj;
  2841.       x := start div bh;
  2842.       l_num := x + cur_loc;
  2843.        if l_num < last_line then
  2844.         begin
  2845.          STR1 := BLNAME[SINDX[L_NUM]];
  2846.          STR2 := '[1][';
  2847.    STR3 := ' | |ADD TO PRINT BUFFER OR |EDIT COMMENT ?][ BUF | COM | CANCEL ]';
  2848.          STR4 := CONCAT(STR2,STR1,STR3);
  2849.          DUMMY := DO_ALERT(STR4,3);
  2850.          CASE DUMMY OF
  2851.          1: BEGIN
  2852.              PINDX[PRNT_COUNT] := SINDX[L_NUM];
  2853.              PRNT_COUNT := PRNT_COUNT + 1;
  2854.              BUFFER_FLAG := TRUE;
  2855.             END;
  2856.          2: BEGIN
  2857.              shw_box_str := blcomm[sindx[l_num]];
  2858.              T := show_com_box(blname[sindx[l_num]]);
  2859.              blcomm[sindx[l_num]] := shw_box_str;
  2860.              SET_CLIP(SX,SY,SW,SH);
  2861.              PRNT_SCR;
  2862.             END;
  2863.          3: ;
  2864.          END;
  2865.         end;
  2866.      end;
  2867.    end;
  2868.  
  2869.   Procedure btn_event(mx,my : integer);
  2870.  
  2871.    var str1,str2,str3 : str255;
  2872.  
  2873.    begin
  2874.     case b_state of
  2875.        0: begin
  2876.            if first_flag then
  2877.             begin
  2878.              b_state := 1;
  2879.             end
  2880.            else
  2881.             begin
  2882.              first_flag := true;
  2883.             end;
  2884.           end;
  2885.        1: begin
  2886.            if first_flag then
  2887.             begin
  2888.              get_line(mx,my);
  2889.              first_flag := false;
  2890.              b_state := 1;
  2891.             end
  2892.            else
  2893.             begin
  2894.              b_state := 0;
  2895.              first_flag := true;
  2896.             end;
  2897.           end;
  2898.        end;
  2899.    end;
  2900.  
  2901.   Procedure tim_event;
  2902.  
  2903.    begin
  2904.     first_flag := false;
  2905.     b_state := 1;
  2906.    end;
  2907.  
  2908.   PROCEDURE Event_Loop ;
  2909.  
  2910.     VAR
  2911.       which,mouse_x,mouse_y : integer ;
  2912.       msg : Message_Buffer ;
  2913.  
  2914.     BEGIN
  2915.       MSG[0] := 0;
  2916.       REPEAT
  2917.         which := Get_Event( E_Message|E_button|E_timer, 1, b_state, 1, 2000,
  2918.                 false, 0, 0, 0, 0, false, 0, 0, 0, 0, msg,
  2919.                 dummy, dummy, dummy, mouse_x, mouse_y, dummy ) ;
  2920.       IF (which & E_Message) <> 0 THEN
  2921.          BEGIN
  2922.            Case Msg[0] of
  2923.              MN_Selected:  Do_Menu( msg[3], msg[4] ) ;
  2924.              WM_Redraw:    DO_REDRAW(MSG[4],MSG[5],MSG[6],MSG[7]) ;
  2925.              WM_Arrowed:   ARROW_RTN(MSG[3],MSG[4]);
  2926.              WM_Vslid:     VSLIDER( MSG[3],MSG[4]);
  2927.              WM_topped:     ;
  2928.              WM_closed:     CLOSE_BTN( MSG[3] );
  2929.              WM_Fulled:    size_window( msg[3] ) ;
  2930.              WM_Hslid :    ;
  2931.              WM_Sized:     MOVE_WINDOW( MSG[3],MSG[4],MSG[5],MSG[6],MSG[7] );
  2932.              WM_MOVED:     MOVE_WINDOW( MSG[3],MSG[4],MSG[5],MSG[6],MSG[7] );
  2933.            END;
  2934.          END;
  2935.        if (which & E_Button) <> 0 then
  2936.         btn_event(mouse_x,mouse_y);
  2937.  
  2938.        if (which & E_timer) <> 0 then
  2939.         tim_event;
  2940.  
  2941.       UNTIL flag1 = 2;
  2942.     END ;
  2943.  
  2944.   BEGIN
  2945.     IF Init_Gem >= 0 THEN
  2946.       BEGIN
  2947.        IF GETREZ <> 0 THEN
  2948.         BEGIN
  2949.         b_state := 1;
  2950.         first_flag := false;
  2951.         init_mouse;
  2952.         HIDE_MOUSE;
  2953.         flag1 := 0;
  2954.         system_drives;
  2955.         INIT_MENU;
  2956.         w_options := $FD3;
  2957.         WTitle := '>> The Menu <<';
  2958.         WItitle :=
  2959.                ' D# |F |FILENAME     |DATE     |FOLDER         |COMMENTS.... ';
  2960.         wstitle :='                                *** SORTING ***';
  2961.         Handle := New_Window(w_options,WTitle,0,0,0,0);
  2962.         Open_Window(Handle,0,0,0,0);
  2963.         Set_WInfo(Handle,WItitle);
  2964.         SYS_FONT_SIZE(CW,CH,bw,bh) ;
  2965.         WORK_RECT(HANDLE,SX,SY,SW,SH) ;
  2966.         wind_get(handle,wf_prevxywh,wx,wy,ww,wh);
  2967.         last_sx := wx;
  2968.         last_sy := wy;
  2969.         last_sw := ww;
  2970.         last_sh := wh;
  2971.         CUR_LOC := 0;
  2972.         scrn_size := sh div bh;
  2973.         total_lines := scrn_size;
  2974.         VSSIZE( TOTAL_LINES );
  2975.         LAST_LINE := 0;
  2976.         LAST_DISK := 0;
  2977.         wind_set(handle,wf_hslsize,1000,dummy,dummy,dummy);
  2978.         SET_CLIP(SX,SY,SW,SH) ;
  2979.         DRAW_MODE(2);
  2980.         SET_COLOR(2,0,0,1000);
  2981.         TEXT_COLOR(1);
  2982.         line_COLOR(1);
  2983.         COLOR_FLAG := TRUE;
  2984.         paint_COLOR(0);
  2985.         FOR N := 1 to 6 DO
  2986.           DIALOG_BOX(N);
  2987.         Set_Add_Box;
  2988.         set_sort_box;
  2989.         ADD_COM_BOX;
  2990.         FOR X := 0 TO 1100 DO
  2991.          BEGIN
  2992.          SINDX[X] := X;
  2993.          PINDX[X] := -1;
  2994.          BLDN[X] := '    ';
  2995.          BLAT[X] := '  ';
  2996.          BLNAME[X] := '              ';
  2997.          BLDATE[X] := '          ';
  2998.          BLFOLD[X] := '              ';
  2999.          END;
  3000.         PRNT_COUNT := 0;
  3001.         BUFFER_FLAG := FALSE;
  3002.         SHOW_MOUSE;
  3003.         infobox;
  3004.         Event_Loop ;
  3005.         Close_Window(Handle);
  3006.         Erase_Menu( menu ) ;
  3007.         SET_COLOR(2,1000,0,0);
  3008.         END
  3009.        ELSE
  3010. DUMMY := DO_ALERT('[3][THIS PROGRAM REQUIRES |    MED OR HI REZ    ][ OK ]',1);
  3011.        Exit_Gem ;
  3012.       END ;
  3013.  
  3014.   END.
  3015.